Java学习之路--代码快

实例代码快

实例代码块的格式:

1
2
3
{

}

实例代码块的特点:

  • 无static修饰。
  • 会与类的对象一起加载,每次创建类的对象的时候,实例代码块都会被加载且自动触发执行一次。
  • 实例代码块的代码在底层实际上是提取到每个类的构造器中去执行的!

实例代码块的作用:

实例代码块可以在创建对象之前进行实例资源的初始化操作,可以为成员常量赋值,可以抽取构造函数中的重复代码,提升代码复用性。

小结:

  • 实例代码块无static修饰,属于对象,与对象一起加载执行。
  • 实例代码块的代码在底层实际上是提取到每个构造器中去执行的!
  • 实例代码块可以在创建对象之前进行实例资源的初始化操作。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A{
{
System.out.println("实例代码块1触发!");
}
A(){
System.out.println("构造方法执行!");
}
{
System.out.println("实例代码块2触发!");
}

public static void main(String[] args) {
A obj = new A();
}
}

输出结果:
实例代码块1触发!
实例代码块2触发!
构造方法执行!

反编译结果

1
2
3
4
5
6
7
8
9
10
11
class A {
A() {
System.out.println("实例代码块1触发!");
System.out.println("实例代码块2触发!");
System.out.println("构造方法执行!");
}

public static void main(String[] args) {
new A();
}
}

静态代码块

静态代码块的格式:

1
2
3
static {

}

静态代码块特点:

  • 必须有static修饰。
  • 会与类一起优先加载,且自动触发执行一次。

    静态代码块作用:

    可以在执行类的方法等操作之前先在静态代码块中进行静态资源的初始化操作。

小结:

  • 静态代码块有static修饰,与类一起加载,自动触发执行一次。
  • 静态代码块的作用:可以用于在静态代码块中进行静态资源的初始化操作。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A{
static{
System.out.println("静态代码块1触发!");
}
A(){
System.out.println("构造方法执行!");
}
static {
System.out.println("静态代码块2触发!");
}

public static void main(String[] args) {
A obj = new A();
A obj_ = new A();
}
}

反编译结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A {
A() {
System.out.println("构造方法执行!");
}

public static void main(String[] args) {
new A();
new A();
}

static {
System.out.println("静态代码块1触发!");
System.out.println("静态代码块2触发!");
}
}

应用案例
Socket.java:

1
2
3
4
5
6
7
8
9
10
11
12
private volatile InputStream in;
private volatile OutputStream out;

static {
try {
MethodHandles.Lookup l = MethodHandles.lookup();
IN = l.findVarHandle(Socket.class, "in", InputStream.class);
OUT = l.findVarHandle(Socket.class, "out", OutputStream.class);
} catch (Exception e) {
throw new InternalError(e);
}
}

MyBatis——XML配置文件介绍(2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<properties resource="jdbc.properties" />

<!--起别名-->
<typeAliases>
<!--
type: 指定给哪个类型起别名
alias:指定别名
注意:别名不缺分大小写。
alias属性是可以省略的。有默认的别名。
-->
<!--<typeAlias type="com.powernode.mybatis.pojo.Car" alias="aaa"/>
<typeAlias type="com.powernode.mybatis.pojo.Log" alias="bbb"/>-->

<!--省略alias之后,别名就是类的简名,比如:com.powernode.mybatis.pojo.Car的别名就是Car/car/cAR/cAr,不缺分大小写。 -->
<!--<typeAlias type="com.powernode.mybatis.pojo.Car"/>
<typeAlias type="com.powernode.mybatis.pojo.Log"/>-->

<!--将这个包下的所有的类全部自动起别名。别名就是类简名。不区分大小写。-->
<package name="com.powernode.mybatis.pojo"/>

</typeAliases>

<environments default="powernodeDB">
<environment id="powernodeDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>

<mappers>

<!--<mapper resource=""/>
<mapper url=""/>
<mapper class=""/>-->

<!--<mapper resource="CarMapper.xml"/>
<mapper resource="LogMapper.xml"/>-->

<!--使用这种方式的前提:CarMapper.xml文件的位置不能随便放-->
<!--必须和CarMapper接口放在一起。-->
<!--XML文件的名字必须和接口名一致。-->
<!--<mapper class="com.powernode.mybatis.mapper.CarMapper"/>
<mapper class="com.powernode.mybatis.mapper.LogMapper"/>-->

<!-- 这种方式在实际开发中是使用的。-->
<!--前提是:XML文件必须和接口放在一起。并且名字一致。-->
<package name="com.powernode.mybatis.mapper"/>


</mappers>

</configuration>

cookie、session、token?

CigHZ.png
CiBu8.png
Cipd5.png
CimNy.png
Cic43.png
Ci3vv.png
CirpU.png
CiNWp.png
Ci8PL.png
CijEk.png
CiHqa.png
Cib2x.png