static关键字:
在类中,用static 申明的成员变量为静态成员变量,也叫类变量,类变量的生命周期和类相同,
- 在整个应用程序执行期间都有效。
- static修饰的成员变量和方法从属于类,普通变量和方法从属于对象。
- 静态类中只能使用静态的方法和变量,非静态对象可以使用静态和非静态的变量和方法。
静态初始化块:
构造方法用于对象的初始化,静态初始化块用于类的初始化操作,在静态初始化块中不能直接访问非static成员。
静态初始块执行顺序:
1.上升到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止
2.构造方法的执行顺序和上面顺序一样。
注意:
静态方法中不能使用this,因为静态方法是属于类的,存放在方法区的,而this是属于对象的,存放在堆中
public class Statictest {
int id;
String name;
String pwd;
static String company;
static {
System.out.println("执行类的初始化工作");
company="BMI";
printCompany();
}
public static void printCompany() {
System.out.println(company);
}
public static void main(String[] args) {
Statictest s=null;//只进行类的初始化,没有创建对象
}
}
java中的传值机制:在java中所有的参数传递,传递的都是值的副本
public class Statictest {
int id;
String name;
public Statictest(int id,String name) {
this.id=id;
this.name=name;
}
public void change1(Statictest u) {//u的地址就是u1的地址
u.id=1001; //即是将u1的id改变了
}
public void change2(Statictest u) {//此时u的地址就是u1的地址
u=new Statictest(1003,"yi");//此时u的地址是重新分配的地址,与u1的地址是不同的
//因此u1的信息没有改变。
}
public static void main(String[] args) {
Statictest u1=new Statictest(1002,"yi");
u1.change1(u1);
System.out.println(u1.id);
u1.change2(u1);//并没有改变u1对象的值。
System.out.println(u1.id);
}
}
java中的package的机制:类似于文件夹
包名:域名倒着写:cn.stx.a.b;
报名唯一第一句非注释类。
同一个包中的类是可以相互使用的,不同的包中可以通过导入的方式,进行使用。