1. static关键字
public class TestStatic {
int a;
static int width; //定义类变量
static void gg(){ //定义类方法
System.out.println("gg");
}
void tt(){
System.out.println("tt");
}
public static void main(String[] args){
TestStatic hi = new TestStatic();
TestStatic.width = 2;
TestStatic.gg(); //gg();
hi.gg(); //通过引用也可以访问static变量或static方法。不过,一般还是使用类名.static成员名来访问gg();
}
}
static 修饰的变量和方法从属于类,类(模板)的信息都在方法区中,而对象(成品)的信息在堆中。
先有类再有对象,因此类中方法不可以调用对象数据,对象中方法却可调用类中数据。
2. static块(静态初始化块)
- 类加载后,对整个类进行某些初始化操作,可以使用static初始化块;
- 类第一次被载入时先执行static代码块;类多次载入时,static代码块只执行一次;Static经常用来进行static变量的初始化;
- 是在类初始化时执行,不是在创建对象时执行(不能引用对象);
- 静态初始化块中不能访问非static成员。
public class TestStaticBlock {
static {
System.out.println("此处,可执行类的初始化工作!");
}
public static void main(String[] args) {
System.out.println("main方法中的第一句");
}
}
3. 参数传值
测试参数传值机制1
public class User1 {
int id;
String name;
String pwd;
public User1(int id,String name) {
this.id = id;
this.name = name;
}
public void test01(User1 u) {
u.name="高小八";
}
public static void main(String[] args) {
User1 u1 = new User1(100,"高小七"); //step1: u1指向对象
u1.test01(u1); //step2: 将u1传给u(u指向对象),对u.name赋值
System.out.println(u1.name);
}
}
IMG_20190716_214423.jpg
测试参数传值机制2
public class User1 {
int id;
String name;
String pwd;
public User1(int id,String name) {
this.id = id;
this.name = name;
}
public void test01(User1 u) {
u.name="高小八";
}
public void test02(User1 u) {
u = new User1(100,"高三"); //重新创建一个对象,u指向,因此u1.name仍是“高小八”
}
public static void main(String[] args) {
User1 u1 = new User1(100,"高小七"); //step1
u1.test01(u1); //step2
System.out.println(u1.name); //这里为止结果与1相同
u1.test02(u1); //step3
System.out.println(u1.name);
}
}
image.png