1.创建一个对象的步骤
- Student s=new Student()
- Student.class加载进内存
- 声明一个Student类型引用
- 在堆内存创建对象
- 给对象中属性默认初始化值
- 属性进行显示初始化
- 构造方法进栈 对对象中的属性赋值 构造方法弹栈
- 将对象的地址值赋值给s
public class void main(String[] args){
Student s1=new Student();
s.show();
}
}
class Student{
private String name="张三";
private int age=23;
public Student(){
name="李四";
age=24;
}
public void show(){
System.out.println(name+""+age);
}
}
2.Static关键字的特点
a.随着类的加载而加载
b.优先于对象存在
c.被类的所有对象共享
举例:同一个班级学生学生应该共用一个班级编号,所以若果某个成员变量是被所有对象共享的,那么就应该定义为静态的。
举例:饮水机(用静态修饰)
水杯(不用静态修饰)
共性用静态 特性用非静态
d.可以通过类名调用
- 其本身也可以通过对象名调用
- 推荐使用类名调用
- 静态修饰的内容一般称为:与类相关的,类成员
class Demo_Static{
public void main(String [] args){
Person p1=new Person();
p1.name="李明";
p1.countey="中国”;
p1.speak();
Person p2=new Person();
p2.name="李空";
//p2.countey="美国”;
p1.speak();
p2.speak();
class Person{
String name;
static String country;
public void speak(){
System.out.println(name+" "+country);
}
}
3.Static的注意事项
a.在静态方法中没有this关键字
- 静态是随着类的加载而加载 this是随着对象的chua创建而存在
- 静态比对象先存在
b.静态方法只能访问静态的成员变量和成员方法
静态方法:
- 成员变量:只能访问静态变量
- 成员方法:只能访问静态成员方法
非静态方法:
- 成员变量:可以是静态也可以是非静态
- 成员方法:可以是静态也可以是非静态
简单记为:静态只能访问静态
静态变量和成员变量的区别:
A.所属不同
- 静态变量属于类 所以也叫类变量
- 成员变量属于对象 所有也叫对象(实例)变量
B.内存中位置不同
- 静态变量存储于方法区的静态区
- 成员变量存储于堆内存
C.内存出现时间不同
- 静态变量随着类的加载而加载 随着类的消失而消失
- 成员变量随着对象的创建而存在 随着对象的消失而消失
D.调用不同
- 静态变量可以通过类名调用 也可以通过对象调用
- 成员变量只能通过对象名调用
4.main方法的格式详细解释
A.格式
- public static void main(String[ ]args){ }
B.针对格式的解释
- public被jvm调用,访问权限足够大。
- static被jvm调用,不用创建对象,直接类名访问
- void被jvm调用,不需要给jvm返回值
- main是一个通用的名称,虽然不是关键字,但是被jvm识别
- String [ ]args以前用于接收键盘录入