共计 2519 个字符,预计需要花费 7 分钟才能阅读完成。
1 static
1.1 概念
Java 中用于润饰常量,变量,办法的关键字,称为动态常量,动态变量,静态方法,它们都存在与办法区。
1.2 特点
① 这些变量和办法都有独立的生命周期,只须要加载一次,
② 内存中的动态变量能够被其余类类共享,其余类调用时无需实例化。
③ 动态只能调用动态,非动态能够随便调用。
④ static 不能和 this 和 super 共用,因为有 static 的时候还没有对象。
1.3 分类
1.3.1 动态常量
在 Java 语言中应用 final static 润饰的成员变量就是一个动态常量,动态常量也就是通常意义下的共享常量,一旦赋值实现就不能够进行更改了。
1.3.2 动态变量
在 Java 语言中应用 static 润饰的成员变量就是动态变量,能够被不同的类操作,属于类且存储与办法区中,只有一份通过类名进行拜访。
1.3.3 静态方法
想要应用类中成员办法,须要先将这个类进行实例化,然而有些时候无奈或者不想创立类的对象时,咱们还要调 用类中的办法供咱们实现业务逻辑代码,此时咱们就能够通过静态方法 —> 调用静态方法,无需创立类的对象
1.3.4 动态代码块
在类中成员办法之外,应用 static 润饰的代码区域能够称之为动态代码块,定义了一个动态代码块,能够实现类的初始化操作 属于类的,在类被加载期间主动执行。
1.4 案例
package com.mtingcat.javabasis.object.sc;
import java.util.Date;
/**
* 这个类用来测试动态成员
* @author MTing
*
*/
public class student {
final static int A = 123; // 动态常量
static String Hello = "Hello"; // 动态变量
static { // 动态代码块
@SuppressWarnings("unused")
String Today = "Today";
System.out.println(new Date());
}
public static void main(String[] args) {@SuppressWarnings("unused")
String sex = Person.sex1; // 动态变量能够不同创立实例对象就能够调用
Hello = "Hello==="; // 动态变量的值能够更改
System.out.println(A+","+Hello);
Person p = new Person("Cat", 22);
}
}
class Person{
String name;
int age;
static String sex1 = "男";
static String sex2 = "女";
public Person(String name,int age){
this.name = name;
this.age = age;
}
public void study(){System.out.println("not static");
}
public static void sleep(){System.out.println("staic sleep()=====");
}
}
1.5 静态方法内存图
1.6 拓展
1.6.1 动态代码块,结构代码块,部分代码块概念
① 动态代码块:在类加载的时候就被加载,只能被加载一次,个别用于我的项目的初始化。
② 结构代码块:在调用构造方法前会主动调用,每次创建对象的时候会被调用。
③ 部分代码块:办法里的代码块,办法被调用的时候才会被执行。
1.6.1.2 案例
package com.mtingcat.javabasis.object.sc;
public class Test {public static void main(String[] args) {Bird bird = new Bird();
bird.eat();}
}
class Bird{
int id;
String name;
// 动态代码块
//1,在类第一次加载时就加载到内存中并始终驻存,// 并全局共享, 直到类隐没动态资源才隐没
//2,并且动态资源只被加载一次
static{System.out.println("动态代码块");
}
// 结构代码块
public Bird(){System.out.println("无参结构");
}
public Bird(int id){
this.id = id;
System.out.println("这是有参构造方法");
}
public Bird(int id,String name){
this.id = id;
this.name = name;
System.out.println("这是全参构造方法");
}
// 部分代码块
public void eat(){System.out.println("这是部分代码块");
}
}
1.6.2 final
final 即最终的,能够润饰类,办法和变量,java 呈现了继承后,子类能够更改父类的性能,当父类性能不许子类扭转时能够利用 final 关键字润饰父类。
1.6.2.1 特点
① 被 final 润饰的类,不能被继承
② 被 final 润饰的办法,不能被重写
③ 被 final 润饰的变量是个常量,值不能被更改
④ 常量的定义模式:final 数据类型 常量名 = 值
1.6.2.2 案例
package com.mtingcat.javabasis.object.sc;
public class test02 {public static void main(String[] args) {Chevrolet c = new Chevrolet();
c.go();
System.out.println(c.name);
c.go00();}
}
class Car{//final class A{}// 被 final 润饰的类不能被继承
final String name = "大黄蜂";
public final void go(){System.out.println("gogogo");
}
}
class Chevrolet extends Car{
// 被 final 润饰的办法不能被重写
/*public void go(){}*/
public void go00(){
/* super.name="擎天柱";*/// 被 final 的变量,不能从新被赋值
System.out.println(super.name);
}
}