类和对象
- 类的定义
class Student{
public String sno; //成员属性
public String name;
public String sex;
public void learn() { //成员方法
System.out.println("学习");
}
public void sleep() {
System.out.println("睡觉");
}
}
- class为定义类的关键字;
- Student 为类名;
- { … } 中为类的主体。
- 类的实例化
拿上述的Student例子来看:
public class Main{
public static void main(String[] args) {
Student stu = new Student();
stu.learn();
stu.sleep();
Student stu1 = new Student();
Student stu2 = new Student();
}
}
结果:
从示例可以看出:
- new关键字用于创建一个对象的实例
- 用 “ . ” 来访问对象中的属性和方法
- 同一个类可以创建多个实例
- 方法
对于上述Student来说,learn是一个方法,表示Student 这个对象具有“学习”的行为;
同样,sleep也是一个方法,代表Student对象具有“睡觉”的行为。
构造方法
在实例化对象的时候挥别自动调用到的方法,方法名字和类名相同,用于对象的初始化。
class Student{
public String sno; //成员属性
public String name;
public String sex;
Student(String sno,String name, String sex){ //构造方法
this.sno = sno;
this.name = name;
this.sex = sex;
}
}
public class Main{
public static void main(String[] args) {
Student stu = new Student("2021","小红","女");
System.out.println(stu.name);
}
}
结果:
static关键字
- 修饰属性
java静态属性和类相关,和具体的实例无关,即同一个类的不同实例公用同一个静态属性。
代码示例:
class Test{
public int a;
public static int count;
}
public class Main{
public static void main(String[] args) {
Test t1 = new Test();
t1.a++;
Test.count++;
System.out.println(t1.a);
System.out.println(Test.count);
}
}
结果:
由上述示例可知,count被static所修饰,所有类共享,且不属于对象,访问方式为:类名.属性
-
修饰方法
在任何方法上应用static关键字,称为静态方法 -
代码块
使用{ }定义的一段代码
可分为:
普通代码块
public class Main{
public static void main(String[] args) {
//普通代码块
{
int x = 1;
System.out.println("x1 = " + x);
}
int x = 100;
System.out.println("x2 = " + x);
}
}
结果:
构造块
class Student{
public String sno; //成员属性
public String name;
public String sex;
Student(){
System.out.println("i am a student");
}
//实例代码块
{
this.sno = "20210201";
this.name = "张三";
this.sex = "男";
}
public void show(){
System.out.println("sno:" + sno + " name: " + name + " sex: " + sex);
}
}
public class Main{
public static void main(String[] args) {
Student stu = new Student();
stu.show();
}
}
结果:
静态块
class Student{
public String sno; //成员属性
public String name;
public String sex;
Student(){
System.out.println("i am a student");
}
//静态代码块
static {
System.out.println("i am learning");
}
}
public class Main{
public static void main(String[] args) {
Student stu = new Student();
}
}
结果:
同步代码块
- 修饰类
- this指针
- this引用的类型:对应类类型引用,即那个对象调用就是那个对象的引用类型
- this引用只能在"成员方法中使用"
- this引用具有final属性,在一个成员方法中,不能再去引用其他的对象
- this引用是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将
调用成员方法对象的引用传递给该成员方法,this引用复杂来接收 - 在成员函数中,所有成员变量的访问,都会被编译器修改通过this来访问
示例:通过this调用自身的构造方法
class Student{
public String sno; //成员属性
public String name;
public String sex;
Student(String sno,String name, String sex){
this.sno = sno;
this.name = name;
this.sex = sex;
}
public void show(){
System.out.println(this.name+"的学号是"+this.sno);
}
}
public class Main{
public static void main(String[] args) {
Student stu = new Student("2021","小红","女");
stu.show();
}
}
结果: