静态static关键字概述
所有本类对象共享一份数据,一旦用了static关键字,内容不再属于对象自己,而是属于类的,本类对象共享同一分数据
private int id;
private String name;
private int age;
static String room;
private static int idCounter=0;//每当new一个新对象,idCounter++
Student one = new Student(name:"郭靖",age:19);
one.room = "101教室";
System.out.println(one.getName()+","+one.getAge()+","+one.room+","+one.getId());
Student two = new Student(name:"黄蓉",age:16);
System.out.println(two.getName()+","+two.getAge()+","+two.room+","+two.getId());
最终运行结果为:
郭靖,19,101教室,1
黄蓉,16,101教室,2
“101教室”只赋值给了one,没有赋值给two,但通过static修饰共享给了two
静态static关键字修饰成员方法
一旦使用static修饰成员方法,那么就成为了静态方法,静态方法不属于对象,而属于类
1.首先创建对象,然后才能使用没有static关键字的内容
2.对于静态方法来说,可以通过对象名静态.方法名进行调用(不推荐),也可以直接通过类名称.静态方法名来调用(推荐)
3.不论是成员变量还是成员方法,如果有了static,都推荐使用类名称进行调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法()
注意:
1.静态不能直接访问非静态
原因:内存当中先有静态内容,再有非静态内容
2.静态方法中不能用this
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象
3.根据类名称访问静态成员变量时,全程和对象没有关系,只和类有关系
静态代码块
代码块格式:
public class{
static{
//静态代码块内容,
}
}
静态代码块实例:
public class Person{
static{
System.out.println("静态代码块执行");
}
public Person(){
System.out.println("构造方法执行")
}
}
public static void main(String[] args){
Person one=new Person();
Person two=new Person();
}
运行结果:
静态代码块执行
构造方法执行
构造方法执行
特点:当第一次用到本类时,静态代码块执行唯一一次,静态内容总是优先于非静态
典型用途:用来一次性的对静态成员变量进行赋值
数组工具类Arrays
java.util.Arrays是一个与数组想爱你高管的工具类,里面提供了大量的静态方法,用来实现数组常见的操作
public static String toString(数组),将参数数组变成字符串,按照默认格式:[元素1,元素2,…]
public static vid sort(数组:按照默认升序对数组元素进行排列
int[] intArray={10,20,30};
String intStr=Arrays.toString(intArray);//将int数组按默认格式变成字符串
System.out.println(intStr)
int array1={2,1,4,17,5};
Array.sort(array1);//将array1按照升序进行排列
System.out.println(Arrays.toString(array1));
运行结果:
[10,20,30]
[1,2,4,5,17]
注意:
1.如果是数值,sort默认按照升序从小到大
2.如果是字符串,sort默认按照字母升序
3.如果是自定义类型,那么这个自定义类需要有Comparable或者Comparator接口的支持
数学工具类Math
java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成数学运算相关操作
public staticdouble abs(double num):获取绝对值
public staticdouble ceil(double num):向上(正方向)取整
public staticdouble floor(double num):向下(负方向)取整
public staticdouble round(double num):四舍五入(不带小数点)
Math.PI近似圆周率常量