一、静态static关键字
- 一旦使用static关键字,那么这样的内容不再属于对象自己,而是属于类,所以凡是本类的对象都共享同一份。
![静态static关键字](https://i-blog.csdnimg.cn/blog_migrate/6b6789409e5810156a7927198d0ffe4c.png)
1、static关键字修饰成员
- 如果没有static关键字,那么必须先创建对象,然后通过对象才能使用它,如果有static关键字,那么不需要创建对象,直接就能通过类名称来使用它。
- 无论是成员变量还是成员方法,如果有了static关键字,都推荐使用类名称进行调用。
- 静态不能直接访问非静态,因为在内存中先有静态内容,后有非静态内容,“先人不知道后人,但后人知道先人”。
- 静态方法中不能用this,因为this代表当前对象,通过谁调用的方法,谁就是当前对象。
public class Student {
private int id;
private String name;
private int age;
static String room;
private static int idCounter = 0;
public Student() {
idCounter++;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
this.id = ++idCounter;
}
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void method(){
System.out.println("这是成员方法");
}
public static void methodStatic(){
System.out.println("这是静态方法");
}
}
public class DemoStatic {
public static void main(String[] args) {
Student one = new Student("郭靖",20);
Student.room ="101教室";
System.out.println("姓名:"+one.getName()+",年龄:"+one.getAge()+",教室:"+one.room+",学号:"+one.getId());
Student two = new Student("黄蓉",18);
System.out.println("姓名:"+two.getName()+",年龄:"+two.getAge()+",教室:"+two.room+",学号:"+two.getId());
one.method();
Student.methodStatic();
two.methodStatic();
}
}
2、static内存图
- 根据类名称访问静态成员变量的时候,全程和对象无关,只和类有关。
![static内存图](https://i-blog.csdnimg.cn/blog_migrate/550e566defde123542ca1374ede9f77e.png)
3、静态代码块
- 格式:
public class 类名称{
static {
// 静态代码块的内容
} } - 特点:当第一次用到本类时,静态代码块执行唯一的一次。静态内容总是优先于非静态,所以静态代码块比构造方法先执行。
- 用途:用来一次性的对静态成员变量进行赋值。
二、数组工具类Arrays
- java.util.Arrays类是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见操作。
- public static String toString(数组):将参数数组变成字符串(按默认格式“[元素1,元素2,…]”)。
- public static void sort(数组):按默认升序对数组的元素进行排序,如果是数值,sort按升序排,如果是字符串,按字母升序,如果是自定义的类型,则自定义的类需要有Comparable或Comparator接口的支持。
int[] intArray = {10,20,30};
String intstr = Arrays.toString(intArray);
int[] array1 = {2,1,3,6};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));
String[] array2 = {"aa","cc","bb"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array1));
- 练习:使用Arrays相关的API,将一个随机的字符串中的所有字符升序排列,并倒序打印。
public class DemoArrays {
public static void main(String[] args) {
String str = "sj23g5";
char[] chars = str.toCharArray();
Arrays.sort(chars);
for (int i = chars.length - 1; i >= 0; i--) {
System.out.println(chars[i]);
}
}
}
三、数学工具类Math
- java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成数学运算相关操作。
- public static double abs(double num):获取绝对值,结果带小数
- public static double ceil(double num):向上取整,结果带小数
- public static double floor(doublr num):向下取整,结果带小数
- public static long round(double num):四舍五入,结果不带小数
- Math.PI : 数值为double型3.14159265358979323846
System.out.println(Math.abs(-2.3));
System.out.println(Math.ceil(3.1));
System.out.println(Math.ceil(5.0));
System.out.println(Math.floor(2.9));
System.out.println(Math.floor(6.0));
System.out.println(Math.round(9.6));