static关键字:(静态随着类的加载而加载)
1、被static修饰的变量变为静态变量,可以直接用类名来访问(类名.变量);
2、被static修饰的方法,可以直接用类名访问(类名.方法);
3、静态代码块,语法:
static {
//代码块
}
随着类的加载而加载,类加载的时候,静态代码块直接运行。
静态的不能访问非静态的
非静态的能访问静态的
静态的可以访问静态的
规范:按规则对待,一般静态变量名大写。
补充:静态方法也可以使用对象调用;类加载的时候,静态数据在内存中了。
public class Demo{
public static void main(String[] args){
Demo1.fun();
System.out.println(Demo1.i);
}
}
class Demo1{
public static int i=10;//可以不赋值,用类名可以直接调用,静态变量
public int j=20;//静态方法不能访问非静态变量
public static void fun(){//静态方法,可以用类名直接调用 类名.fun();
i=100;//静态变量被方法修改值后,静态变量将会被改变
System.out.println("静态方法");//+j
}
}
public class Test1{
static{
System.out.println(“我是静态代码块”);
}
}
final关键字:
1、被final修饰的类不能被继承;(被称为最终类)
2、被final修饰的方法不能被重写;
3、被final修饰的变量不能被修改;(变为常量)一般定义为final static
(Final修饰的局部变量,可以不赋值,全局变量必须赋值。)
4、方法内部类只能访问被final修饰的局部变量。
public class Demo{
public static void main(String[] args){
Person p=new Person();
p.fun();
}
}
class Person{//被Final修饰的类称为最终类,不能被继承
public final int age=22;//被final 修饰的变量必须赋值
public void fun(){
final int i;//被方法修饰的方法里面的变量可以不赋值
//,不过没意义,一般赋值,赋值后也不可以改变
//age=23;被final修饰的变量不能被修改//包括传参
}
}
class Student extends Person{
public final void fun(){}
}