类体{
实例变量;
实例方法;
静态变量;
静态方法;
构造方法;
静态代码块;
实例语句块;
方法(){
局部变量;
}
}
回顾1
/*
1.类加载机制:在程序执行之前,把需要加载的类全部加载到jvm中。
2.先完成加载才会执行main方法
*/
public class Review{
//静态代码块:在类加载时执行,只执行一次
static {
System.out.println("Review静态代码块执行!");
}
//程序入口
public static void main(String[] args){
//局部变量
int i = 100;
//new一个对象,调用一次构造方法
Student s1 = new Student();
s1.study(); //调用实例方法
Student s2 = new Student(2222,"lisi");
}
}
//学生类
class Student{
//静态代码块
static {
System.out.println("Student静态代码块执行!");
}
//学号
private int no; //实例变量
//姓名
private String name;
//任务
private static String task = "学习";
//实例语句块:构造方法之前执行,调用一次构造方法执行一次
{
System.out.println("实例语句块执行,在构造方法之前!");
}
//无参构造
public Student(){
//this() 调用本类其他构造方法,只能在构造方法第一行
this(1111,"zhangsan");
System.out.println("无参构造执行!");
}
//有参构造
public Student(int no, String name){
this.no = no;
this.name = name;
System.out.println("有参构造执行!");
}
//get和set方法
public void setNo(int no){
this.no = no;
}
public int getNo(){
return no;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
//实例方法
public void study(){
//System.out.println(this.name + "正在学习");
//System.out.println(name + "正在学习");
System.out.println(this.getName() + "正在学习");
//System.out.println(getName() + "正在学习");
//调用实例方法
//this.eat();
eat(); //省略前面默认加"this.",即"引用."
}
public void eat(){
System.out.println(this.getName() + "正在吃饭");
//调用静态方法
//Student.m1();
m1(); //省略前面默认加"类名."
}
//静态方法
public static void m1(){
System.out.println("静态方法1执行!");
//调用静态方法
//Student.m2();
m2();
}
public static void m2(){
System.out.println("静态方法2执行!");
//编译器检测到task是一个静态变量,所以会自动在task前面加"类名."
//以上静态方法同理
System.out.println("主要任务:" + task);
}
}
结果:
Review静态代码块执行!
Student静态代码块执行!
实例语句块执行,在构造方法之前!
有参构造执行!
无参构造执行!
zhangsan正在学习
zhangsan正在吃饭
静态方法1执行!
静态方法2执行!
主要任务:学习
实例语句块执行,在构造方法之前!
有参构造执行!
回顾2
/*
1.所有实例相关的都是先创建对象,通过"引用."的方式调用
2.所有静态相关的可以直接通过"类名."的方式调用("引用."的方式也可以但是不建议)
3.实例方法可以直接调用实例变量和实例方法、静态变量和静态方法。
4.静态方法只能调用静态变量和静态方法。
如果想要调用实例变量和实例方法,需要new 对象
5.在同一个类中
引用.(this.) 可以省略
类名. 可以省略
*/
public class Review2{
int i = 100;
static int j = 1000;
//实例方法
public void m1(){
//访问其他类中的静态方法
T.t1();
//访问其他类中的实例方法
T t = new T();
t.t2();
}
public void m2(){}
public void x(){
m1(); //实例方法前面默认加"this."
m2();
m3(); //静态前面默认加"类名."
m4();
System.out.println(i);
System.out.println(j);
}
//静态方法
public static void m3(){}
public static void m4(){}
//程序入口
public static void main(String[] args){
//编译错误:无法从静态上下文中引用非静态方法
//m1();
//m2();
m3();
m4();
//编译错误:无法从静态上下文中引用非静态变量
//System.out.println(i);
System.out.println(j);
//在static方法中要访问m1()、m2()、i,需要new 对象
Review2 r = new Review2();
r.m1();
r.m2();
System.out.println(r.i);
}
}
class T{
public static void t1(){}
public void t2(){}
}