static修饰符
含义:静态的
修饰的内容:成员变量,代码块,内部类
①static修饰成员变量
成员变量的分类:
实例变量(属于对象的,开启的空间由对象生成,随对象消失)
类变量—>通过static修饰的成员变量(属于类)
当前类的所有对象共享一个变量
使用:
1.通过对象调用(不推荐)
2.通过类名调用
类名 . 类变量
②static修饰成员方法
成员方法分类:
实例方法:属于对象
类方法:属于类
目的:方便调用方法(不需要new对象)
语法: 类名 . 方法名
提示:一般的工具类中的方法都为类方法
在类加载的时候,先加载类方法,在加载普通方法(都不执行,只有调用才执行)
注意:
静态方法内没有this关键字,因为静态方法是使用类名调用,没有当前对象
静态资源不能直接调用非静态资源,到那时可以直接使用静态资源
静态资源不能直接调用非静态资源:原因是静态方法会在方法区里面被先加载,所有短路
非静态资源可以使用静态资源
public class Test1 {
public static void main(String[] args) {
Utils.a(); //静态资源调用静态资源
Utils utils = new Utils();
utils.c(); //非静态资源调用静态资源 (注意:非静态不能使用类名直接调用)
}
}
public class Utils {
public static void a(){
int num=b();
System.out.println(num);
}
public static int b(){
return 5;
}
public int b1(){
return 5;
}
public void c(){
int num=b();
System.out.println(num);
}
// public static void e(){
// System.out.println(5+b1());//err 静态资源不能直接调用非静态资源
// }
}
**java提供了一些工具类(常用的)**
①Arrays对数组的操作
Arrays.sort(数组) 排序
Arrays.toString(数组) 将数组里面的数据拼接成字符串
Arrays.copyOf(数组,新数组的长度) 数组赋值
②System 系统类
System.currentTimeMillis(); 返回当前时间搓(从1970.1.1起的毫秒)
System.exit(int) 系统退出(0是安全退出)
System.gc() 垃圾回收机制
③Math类
Math.abs() 绝对值
Math.random() 随机数[0,1)
Math.round() 四舍五入
Math.floor() 向下取整
Math.ceil() 向上取整
Math.sqrt() 开方
Math.max() 最大值
Math.min() 最小值
Math.pow(3,4) 3的4次方
Math.PI
**代码块**(实例初始化块)
位置:直接在类体中(和成员变量,成员方法同级)
语法:{代码块}
原理:在实例化对象的时候默认调用,并且在构造方法之前
应用场景:实例化对象前,输出一些代码
**静态代码块**
位置:直接在类体中(和成员变量,成员方法同级)
语法:static{代码块}
原理:在类加载的时候调用,并且只调用一次
应用场景:类加载的时候,输出一些代码
补充:如果在继承中:
永远是先父类后子类(类加载,实例化对象)
**抽象**
abstract
修饰符--->类、方法
1.抽象类
a.抽象方法和普通方法可以有0——n个
b.有抽象方法该类必定是抽象类,到那时抽象类里面可以没有抽象方法
c.抽象类不能实例化
d.子类继承父类,必须实现父类的所有抽象方法
e.抽象类可以有构造方法和属性,就是为了子类对象初始化父类空间
抽象方法
没有方法体
用途:设计模板
**多态**
概念:之同一种行为,具有多个不同的表现形式;
前提:
1.必须是继承关系
2.必须存在方法重写
3.父类的引用指向子类的对象
弊端:
调用不到子类独有的方法
好处:
a.多态参数
b.多态数组