1、static
用于修饰类的成员变量,成员方法,代码块
static | 非静态(实例) | |
---|---|---|
属性 | 静态属性 | 实例属性 |
方法 | 静态方法 | 实例方法 |
调用方式 | 类,属性,类,方法{} | 对象.方法名() |
隶属 | 类 | 对象 |
//静态方法和属性声明
/**
* 静态属性 静态方法属于所有的属性和方法,
* 所有的实体类共享静态的属性和方法
*/
//静态属性
public static String school = "育才小学";
//静态方法
public static int add(int a,int b){
return a + b;
}
静态代码块的特点
1、在java中类只能加载一次,而对象可以创建多次,
2、静态代码块在类加载时调用,只调用一次
3、静态属性可以在同一个项目中的类中使用
应用场景:
static:调用的时候方便
工具类中定义的静态方法比较多,如果方法不不依赖于实例属性;一般定义成静态的。
package com.aaa.packageDemo;
public class TestStatic {
public static void main(String[] args) {
User user1 = new User();
User user2 = new User();
//属性访问方式
//1、对象名.属性名 user.school
//2、类名.静态方法
System.out.println("school:" +user1.school);
System.out.println("school:" +user2.school);
System.out.println("school:" + User.school);
user1.school = "实验小学";
System.out.println("school:" +user1.school);
System.out.println("school:" +user2.school);
System.out.println("school:" + User.school);
//调用静态方法,一般使用第二种
//1、对象名.静态方法
//2、类名.静态方法
// int result = user1.add(1,2);
int result = User.add(1,2);
System.out.println("result:" + result);
}
}
/**
* 静态代码块的特点:
* 1、只有在类加载时调用,无论创建多少对象 当前类只加载一次
* 类的加载就是将.class文件加载到内存
* 2、静态代码 只能访问静态属性 静态方法
*/
static {
school = "实验一小";
System.out.println("静态代码块:" + school);
}
2、final
中文的意思 最终的,无法改变的,用于修饰类,变量,方法
-
修饰变量:该变量为变量,只能被赋值一次
赋值的方法有两种:
1、声明变量时赋值
2、在构造方法中赋值:public final double PI = 3.14;
-
修饰类:该类不能被继承
-
修饰方法:该方法不能被子类重写
//设定圆周率,如果不想让他修改设置为final
//1、初始化并设置值,在没有构造方法时private final float PI = 3.1415926f;
//2、在构造方法设置
//若果用final修饰类,当前类不能被继承,不可变类
private final float PI;
public User(){
PI = 3.1415926f;
}
3、总结
静态(static):
1、调用静态方法:1、对象名.静态方法;2、类名.静态方法
可以被本包下的类,子包下的类,本项目下的其他包的类调用
2、调用静态属性:1、对象名.静态属性;2、类名.静态属性
可以被本包下的类调用,其他包的类不能调用
3、调用公共方法:1、对象名.方法;2、类名.方法
可以被本包下的类,子包下的类,本项目下的其他包的类调用
4、调用公共方法:1、对象名.方法;2、类名.方法
可以被本包下的类,子包下的类,本项目下的其他包的类调用
final
1、被final修饰的变量不可以被改变,又被称为常量
2、被final修饰的方法不可以被重写
3、被final修饰的类不可以被继承
final总结:不可变