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);
}
}
发表回复