Skip to content

Commit

Permalink
feat(post): 完善文章
Browse files Browse the repository at this point in the history
  • Loading branch information
李济芝 committed Oct 31, 2024
1 parent 6a11d46 commit 3838e40
Show file tree
Hide file tree
Showing 70 changed files with 4,531 additions and 2,133 deletions.
23 changes: 23 additions & 0 deletions blog-site/content/posts/ideology/代码之外-10.志闲少欲.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: "代码之外-志闲少欲"
date: 2024-10-19
draft: false
tags: ["反思与感悟","代码之外"]
slug: "other-code-10"
---

“志”的意思是志向,“心之所之为志”,心里向往的目标为“志”,你的志向是什么?相信没有人从小的志向就是赚钱或者买房子、车子。
在不谈物质的情况下,人们还是喜欢追求一些精神层面的目标,比如研究某项技能等。
当然不是说物质不重要的意思,应该是在追求精神目标的时候,顺带着得到了一些物质,这样最后才不会感到虚无。
如果一味的盲目追求物质,看到别人有,自己也想买,虽然外表光鲜亮丽,但是灵魂却黯淡无光,在没有足够的支撑的情况下,最终会失去表面的一切。

那么什么是志闲而少欲呢?”志闲而少欲“,出自《皇帝内经》,大意是让目标不要太多太高,务实一些,努努力就能够够得着的那种。志闲而少欲就是告诉我们必须要通过自己的努力,找到自己切实实现的目标。
比如学习一门乐器,花个五六天,这就是志闲而少欲。如果定的目标过高不切实际,那么你坚持两天就不会做了,因为你自己也知道实现不了,然后三天打鱼两天晒网,久而久之挫败感越来越强,有些人就直接摆烂了,躺在床上什么都不做。
志闲就是具体能看得到的东西,志不闲是那些看不到的遥遥无期的,比如,我什么时候能发财,我什么时候结婚等等。当你的生活由这些明确的目标构成的时候,你会发现你忙的要死,你就没有时间产生那么多欲望。

你的欲望是合理的、合适的,你的欲望就会少,欲望会少,烦恼就会少,于是就会出现大气免成的状态。
意思是大的事情是浑然天成的,不是靠人力所能决定的,一个人能不能当首富,能不能当皇帝,不是看他自己努力的,是看天意的。大的成就不是自己努力的结果,是许多因缘巧合汇聚到一起的结果,所以叫大器免成。
所以大的事情琢磨也没用,你能决定的就是身边的小事。

我们要做的就是过好当下,修养自己的精神,让自己成为一个更有趣,思想丰富,知识渊博,见识广博的人,你的幸福是自然而然的。
而且只有你变成这样的人,未来你发了财,你才能够承担这份财富,老天爷把这份财富降临到你头上,你才不会被这个钱砸死。
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "代码之外-谈谈算命"
date: 2024-08-20
draft: false
draft: true
tags: ["反思与感悟","代码之外"]
slug: "other-code-08"
---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "代码之外-学会顺势而为"
date: 2024-08-20
draft: false
draft: true
tags: ["反思与感悟","代码之外"]
slug: "other-code-09"
---
130 changes: 128 additions & 2 deletions blog-site/content/posts/java/javakeyword/this关键字详解.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,133 @@
---
title: "this关键字详解"
date: 2024-08-20
draft: true
date: 2024-10-31
draft: false
tags: ["Java", "关键字","详解"]
slug: "java-keyword-this"
---

## this
在Java中,`this`是一个特殊的引用,指向当前对象的实例。
JVM会给每个对象分配一个`this`,来代表当前对象,换句话说,`this`是一个特殊的变量,它保存了当前对象的内存地址。
它是类内部对当前对象的引用,因此在实例方法或构造方法中,可以通过`this`来访问对象的属性和方法。

`this`是一个内置的引用,代表了“当前对象”,它指向当前对象的实例。
可以把`this`看成一个特殊变量,它保存着当前对象的内存地址,并允许你在类内部访问该对象的属性和方法。

### 使用示例
`this`有如下几种用法:
- 当局部变量和成员变量同名时,`this`可用于区分成员变量与局部变量。
```java
public class Person {
private String name;

public Person(String name) {
this.name = name; // this.name 是成员变量,name 是构造器的参数
}
}
```
- 在一个构造方法中,可以使用`this()`调用当前类的其他构造方法,从而减少代码冗余。
```java
public class Car {
private String model;
private int year;

public Car(String model) {
this(model, 2020); // 调用另一个构造方法
}

public Car(String model, int year) {
this.model = model;
this.year = year;
}
}
```
- `this`可以用在类的实例方法中,帮助开发者引用当前对象。例如,将当前对象作为参数传递给其他方法。
```java
public class Printer {
public void printMessage() {
System.out.println("Printing from Printer...");
}

public void printSelf() {
Helper.print(this); // 将当前对象作为参数传递
}
}
```

需要注意的是,因为`this`是一个对象的引用,而静态方法属于类本身,与具体对象无关。所以在静态方法中无法使用`this`,因为此时不存在当前实例。
```java
public class Example {
private String name;

public static void staticMethod() {
// this.name = "test"; // 错误,静态方法中不能使用 this
}
}
```

### 执行原理
`this`关键字的执行原理在于它作为一个特殊引用,在实例方法调用时隐式传递给方法。
在编译阶段,Java 编译器将实例方法中的`this`转换为一个隐式的参数,供方法在运行时使用。
每个实例方法在编译后,都会在方法参数列表中增加一个`this`参数(作为第一个参数),用于指向调用该方法的对象。

例如,以下类:
```java
public class Example {
private String name;

public void printName() {
System.out.println(this.name);
}
}
```
编译后,相当于将`printName()`方法编译成类似以下结构:
```java
public void printName(Example this) {
System.out.println(this.name);
}
```

当 Java 源代码被编译成字节码后,`this`关键字的引用被转换为`aload_0`指令。该指令将当前对象引用加载到操作数栈上。
```java
public class Example {
private String name;

public void printName() {
System.out.println(this.name);
}
}
```
```text
0: aload_0 // 将 `this` 引用加载到栈中
1: getfield Example.name // 获取当前对象的 `name` 字段
2: invokevirtual #16 // 调用 `System.out.println`
3: return // 返回
```
JVM在执行每个实例方法时,都会为方法分配一个栈帧。栈帧包含局部变量表、操作数栈和方法返回地址等。
对于实例方法,JVM 将`this`引用存储在局部变量表的第一个槽位中(`aload_0`直接从第一个槽位加载this)。

当方法需要访问当前对象的字段或调用它的其他方法时,通过`aload_0`指令将`this`引用加载到操作数栈,然后结合其他字节码指令完成字段读取或方法调用。

举个例子,假设有如下代码:
```java
Example example = new Example();
example.printName();
```
在这段代码中,`example.printName()`会将`example`对象的引用传递给`printName()`方法的`this`参数。
JVM通过栈帧机制管理方法调用栈和对象引用。具体过程如下:
1. JVM 为`printName()`方法创建一个新的栈帧,并将`example`引用作为`this`参数传入栈帧。
2. `this`作为`printName()`方法的隐式参数,被绑定到`example`引用。
3. 方法执行时,字节码中的`aload_0`指令将`this`引用加载到操作数栈,使得`printName()`方法可以访问`example`的属性和方法。

总结一下,`this`的执行原理在于它是一个隐式传递的参数,指向当前对象实例,并在编译和执行过程中通过`aload_0`加载到栈中。
在JVM内部,它通过栈帧管理和字节码指令实现了对当前对象的引用,使得实例方法可以操作调用对象的属性和方法。

执行流程:
1. 编译阶段: 在编译阶段,Java编译器会为实例方法添加一个隐藏的`this`参数。这个参数会成为方法的第一个参数。
2. 字节码指令: 在JVM中,`this`引用会被加载到操作数栈。例如,`aload_0`是将`this`引用加载到栈中的指令。在实例方法调用时,`this`被放入局部变量表的第一个槽位(索引为 0)。
3. 运行时: 当`this`被传递给方法时,JVM 会为该方法分配一个栈帧,其中包含`this`引用,使得方法能够操作当前对象的属性和方法。

### 线程安全
在多线程环境中,JVM为方法分配独立的栈帧,每个线程操作自己的栈,因此`this`引用也是线程安全的,因为它仅在线程的栈帧中使用,彼此之间不共享。
即使多个线程同时操作同一个对象,每个线程仍然有自己的`this`引用,不会相互影响。
8 changes: 6 additions & 2 deletions blog-site/content/posts/java/spring/SpringBoot详解.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ SpringBoot基于`Sring4`进行设计,继承了原有Spring框架的优秀基
- 无配置的约定:SpringBoot遵循“无配置”的原则,使用合理的默认值和约定,减少需要编写的配置代码。
- 快速开发:SpringBoot的项目结构和默认配置帮助开发者快速启动新项目。内置工具和插件支持开发、测试和部署。

## 与Spring的区别
Spring和SpringBoot的最主要区别在于配置和启动的复杂性。
## 与Spring区别
Spring提供了大量的子模块,如Spring Core、Spring Web、Spring Data等,但它们的配置复杂度较高,且需要开发者手动配置各类文件和依赖。
SpringBoot基于Spring,目的是简化Spring应用的创建和配置。

SpringBoot是对Spring的扩展,简化了Spring应用开发的过程,但仍然依赖Spring核心库。
使用SpringBoot开发的应用实际上是基于Spring的,只是通过自动配置和内置依赖提升了开发效率。

Spring和SpringBoot的主要区别在于配置和启动的复杂性。Spring框架需要大量的手动配置,包括XML配置文件或Java配置类,配置过程较为繁琐且易出错。
此外,Spring应用程序通常需要部署到外部的Web服务器,并需要额外的步骤来启动和运行。
Expand Down
Loading

0 comments on commit 3838e40

Please sign in to comment.