0%

类的组成

当类的成员没有初始化的时候,都会给默认变量
image
定义类的例子

1
2
3
4
5
6
7
//访问限定词   关键词    类名
public class ClassName{
//属性(变量,字段)

//方法

}

一 变量

格式:修饰符+变量名(定义并初始化值),如果是final 关键字修饰,则该变量是一个常量,常量不可以重新赋值

二 方法

格式:修饰符+返回值+方法名(参数){执行体|方法体}

三 修饰词

image

3.1 public

简称公共的,被修饰的类,属性以及方法不仅可以被跨类访问,而且也许跨包访问

3.2 private

简称私有的,被修饰的类,属性以及方法只能被该类的对象访问(同类不同对象可以访问其私有变量),其子类不能访问,更不能跨包访问。

3.3 protect

介于 public 和 private 之间的一种访问修饰符,被其修饰的类,属性以及方法只能被本身的方法以及子类访问,即使子类在不同的包中也可以访问,并且本包下的其他类也可以访问

3.4 default

只能在本包下被访问,无论是类,接口等。

构造函数

格式:

修饰符+类名(){}

注意:

没有返回值,也不能用static静态修饰。如果一个我们没有给他定义构造函数时系统会为其创建一个无参的构造函数。

作用:

通过该构造函数来创建这个类的实例对象。初始化这个类的信息。也可以通过构造函数传参。

代码块

静态代码块

1
2
3
4
5
public class test{
static{
System.out.println("静态代码块");
}
}

执行时机

静态代码块在类被加载的时候就运行了,而且只能被运行一次,并且优先于各种代码块以及构造函数,如果有多个静态代码块,会按照书写顺序依次执行

作用

一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。

注意

  1. 静态代码不能存在任何方法体中
  2. 静态代码块不能访问普通变量

    构造代码块

    少了 static 关键字
    1
    2
    3
    4
    5
    public class test{
    {
    System.out.println("构造代码块");
    }
    }

执行时机

构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行。需要注意的是,听名字我们就知道,构造代码块不是优先于构造函数执行,而是依托于构造函数,也就是说,如果你不实例化对象,构造代码块是不会执行的。怎么理解呢?我们看看下面这段代码:

1
2
3
4
5
6
7
8
public class test{
{
System.out.println("构造代码块");
}
public test(){
System.out.println("无参构造函数");
}
}

反编译生成的 class 文件

1
2
3
4
5
6
public class test{
public test(){
System.out.println("构造代码块");
System.out.println("无参构造函数");
}
}

如果是多个构造代码块,则执行顺序按照书写顺序依次进行。

普通代码块

普通代码块和构造代码块的区别是,构造代码块是在类中定义的,而普通代码块是在方法体中定义的。且普通代码块的执行顺序和书写顺序一致。

1
2
3
public void sayHello(){
System.out.println("普通代码块");
}

执行顺序

静态代码块>构造代码块>构造函数>普通代码块

类的生成对象内存分布图

image

本文标题:

文章作者:志者

发布时间:2019年08月16日 - 15:46:00

最后更新:2020年01月30日 - 16:50:53

原始链接:http://witman1999.github.io/类.html

许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
copy