Java自学|static详解 1.静态属性 我们线定义一个Person类,他有一个静态属性age和一个和非静态属性name: public class Person { private static int age ; //静态属性 private String name ; //非静态属性 publ
Java自学|static详解
1.静态属性
我们线定义一个Person类,他有一个静态属性age和一个和非静态属性name:
public class Person{private static int age; //静态属性
private String name; //非静态属性
public static void main(String[] args) {
System.out.println(age); //直接用静态属性,正常
//System.out.println(name); //直接用非静态属性,报错
}
}
这个程序,是没有任何问题的,能直接输出age,但是如果我们将第二个输出语句的注释符去掉的话,就会出现错误:
这个问题,我们之前也提到过,因为静态属性是有类的时候就加载出来了,而非静态属性必须要在实例化了之后才会生成。
2.静态方法
我们线定义一个Person类,他有一个非静态方法say2,和静态方法say1和main
public class Person{//静态方法
public static void say1(){
}
//非静态方法
public void say2(){
}
public static void main(String[] args) {
}
}
我们在main方法中调用say1和say2,会发现say1正常调用,而say2会出现报错,不同的尝试,我们会发现,可以在say1中调用say1,say2中调用say2(这里可以和递归联系一下),也可以在say2中调用say1,但是不能在say1中调用say2.
3.静态代码块
我们还是定义一个Person类,如下:
public class Person {{
System.out.println("匿名代码块");
}
static {
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造");
}
public static void main(String[] args) {
Person person = new Person();
}
}
我们在main方法中new了一个Person,发现输出的顺序为:
我们再做另一个测验
public class Person {{
System.out.println("匿名代码块");
}
static {
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造");
}
public static void main(String[] args) {
Person person = new Person();
Person person1 = new Person();
}
}
我们new了两个对象,输出发现静态代码块只输出一次,这说明了,static代码块只执行一次
4.静态导入包
假如我们要生成一个随机数,我们可以用Math的random方法:
public class Person {public static void main(String[] args) {
System.out.println(Math.random());
}
}
如果我们不想每次都写一个Math,是吧,很麻烦,那么我们可以怎么操作呢?
正常情况下,我们要使用一个包,是不是直接导入这个包就行了
import java.lang.Math;我们可以加上static直接导入这个random方法:
import static java.lang.Math.random;这样就可以直接用random了不用加Math.
世上没有白走的路,每一步都算数!
跟上狂神说Java!
每个牛B的人背后都有段苦逼的岁月,只要像sb一样的坚持,终将牛B!