Static关键字
格式:
Static 属性名:类属性,静态属性
Static 方法名:类方法,静态方法
由static修饰的成员(类成员,静态成员):
(1)类对象共享
(2)类加载时产生,销毁时释放,生命周期长
访问方式:
(1) 类名.成员名
(2) 对象名.成员名
特点:
在成员方法中:可以直接访问类中静态成员(this.成员名)
在静态方法中:
不能直接访问同一个类中的非静态成员,只能直接调用同一个类中的静态成员
不能使用this
可通过对象实例化后,对象.成员方法的形式访问非静态成员
例如:
publicclass User {
//成员变量
public String name;
//类变量
private String password;
//成员方法
publicvoid Name() {
//在成员方法中直接调用静态属性
this.password = "123";
System.out.println(this.password);
//在成员方法中直接调用静态方法
this.hua();
User.hua();
}
//类方法
publicstaticvoid hua() {
System.out.println("huahua");
}
//主方法
publicstaticvoid main(String[] args) {
//实例化对象
Usera = new User();
a.Name();
//在静态方法中调用非静态成员
a.password = "456";
System.out.println(a.password);
}
}
代码块
普通代码块(放在方法中):顺序执行,先出现,先执行
格式:{}
构造代码块(实例化对象一次,执行一次)创建对象时调用,优于构造方法执行
格式(同一类中可有多个):{}
静态代码块(只执行一次,在类加载时调用):
格式(可有多个):static{
}
例如://定义
publicclass Code {
//构造方法
public Code() {
System.out.println("Code的构造方法");
}
//代码块
{
System.out.println("Code的构造代码块");
}
//静态代码块
static {
System.out.println("Code的静态代码块");
}
}
publicclassCodeBlock {
//构造方法
public CodeBlock() {
System.out.println("CodeBlock的构造方法");
}
//代码块
{
System.out.println("CodeBlock的构造代码块");
}
//静态代码块
static {
System.out.println("CodeBlock的静态代码块");
}
publicstaticvoid main(String[] args) {
System.out.println("CodeBlock类主方法");
{
System.out.println("CodeBlock的普通代码块");
}
//实例化对象
System.out.println("实例化Code类对象");
Codec1= newCode();
System.out.println("实例化CodeBlock类对象");
CodeBlockCB= newCodeBlock();
{
System.out.println("CodeBlock的普通代码块");
}
}
}
执行结果如下:
CodeBlock的静态代码块
CodeBlock类主方法
CodeBlock的普通代码块
实例化Code类对象
Code的静态代码块
Code的构造代码块
Code的构造方法
实例化CodeBlock类对象
CodeBlock的构造代码块
CodeBlock的构造方法
CodeBlock的普通代码块