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); }}