一.类与对象的定义
- 类:对某一类事物的共性进行抽象的描述(如:动物,水果),是一个新的数据类型;
- 对象:实际存在的属于某一类事物的具体个体,也称实例;(如:兔子,苹果)
一个完整的类由成员属性(描述这个类的属性,也称成员变量)和成员方法(描述这个类的行为)。
一个类可以无属性也无方法,但这样的类也无意义。
二.类的封装
封装指的是将某个对象的数据和方法组合在一个类中,即定义一个类,使用者可根据需求来实例化对象。
类定义的基本结构为:
public class Student{ // 【类修饰符】+class+类名
//成员变量 【修饰符】+数据类型+变量名【=初始值】
// 如果定义成员变量时未赋初值,系统会根据数据类型给定默认初始值
int ID; // 声明成员变量:学号ID
String name; // 声明成员变量:名字name
int age; // 声明成员变量:年龄age
public String getInfor(){ // 定义成员方法:获取学生信息getInfor
//成员方法 【修饰符】+返回值+数据类型+方法名(参数表)
String infor;
info = "学号:"+ID+"姓名:"+name+"年龄:"+age;
return infor;
}
}
类修饰符:
类修饰符 | 说明 |
public | 定义一个公共类,该类可被任何类访问 |
abstract | 定义一个抽象类,该类不能被实例化 ,不能与final同时出现 |
final | 定义一个最终类,该类不能被其他类继承,不能与abstract同时出现 |
缺省 | 该类 只有在同一个类中才可以访问 |
成员(变量/方法)修饰符:
成员(变量/方法)修饰符 | 说明 |
public | 公共访问修饰符,该变量/方法可被其他任何类的方法访问 |
private | 私有访问修饰符,该变量/方法只允许本类的方法访问 |
protected | 保护访问修饰符,该变量/方法可被本类、子类及同一个包中的类访问 |
缺省 | 缺省访问修饰符,该变量/方法只允许被同一个包中的类访问 |
final | 最终修饰符,该变量的值不可被更改/该方法不能被重载 |
static | 静态修饰符,该变量属于这个类,被类的所有对象共享,该方法不需要实例化就可以使用 |
transient | 临时修饰符,该变量在对象序列化时不被保存 |
volatile | 易失修饰符,该变量可同时被几个线程控制和修改 |
abstract | 抽象修饰符,该方法只有方法原型,没有方法实现,需在子类中实现 |
synchronize | 同步修饰符,在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程的访问,运行结束后解锁 |
native | 本地修饰符,该方法的方法体是用其他语言在程序外部编写 |
java语言允许成员变量和成员方法有多个修饰符,但需要注意修饰符之前有互斥的情况,如abstract和final。
成员变量的默认初始值
数据类型 | 初始值 |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
引用类型 | null |
float | 0.0f |
double | 0.0 |
char | ‘\0’ |
boolean | false |
三.对象的创建与引用
对象是一个类实例化的结果,当其完成工作后,会被销毁,所占用的资源将被系统回收。
其实例化格式为:
类名
对象名 = new 类名();
如:People p=new People();
new 一个对象将在堆内存上开辟一个空间进行存放;
创建完对象后,通过点访问来访问它的成员变量和成员方法:
对象名.成员变量;
对象名.成员方法(实参);
例如:
public class Test {
public static void main(String [ ] args){
Student s1=new Student();
Student s2=new Student();
System.out.println(s1.gteInfor());//打印操作
System.out.println(s1.gteInfor());
S1.ID=201901; //修改成员变量:ID
S2.ID=201905;
S1.name=”Tim”; //修改成员变量:name
S2.name=”Lily”;
S1.age=20; //修改成员变量:age
S2.age=21;
System.out.println( “修改后信息”+s1.gteInfor());
System.out.println( “修改后信息”+s2.gteInfor());
}
}
- this引用
类中的每个对象都在堆中拥有独立的存储空间,但成员方法只有一份,存放在方法区(内存)中,java通过this引用来使不同对象调用同一方法事返回格子对象的成员变量。
this是系统资源,指向当前对象本身,只允许读不允许写,存储当前对象的地址。即,Student类的成员方法实际如下所示:
public String getInfor(){
String infor;
infor=”学号:”+this.ID+”姓名:”+this.name+”年龄:”+this.age;
return infor;
}
this引用的常用用途:
- 在构造方法中调用其他方法时,只能使用this引用且必须位于构造方法的第一行;
- 构造方法的形参与类的成员变量名相同时,需用this引用来区分俩者;
public void setValue(char name){
this.name=name;//name表示形参,this.name表示成员变量
}
- 在链式调用中返回对象本身。
- 匿名对象
在有些情况下,不需要声明对象名而直接创建一个对象后调用其成员方法,这种对象称为匿名对象;
Student s1=new Student();
System.out.println(s1.getInfor());
//俩句话可改写为:
System.out.println(new Student().getInfor());
// 匿名对象
四.访问权限
访问权限 | 允许访问的类 |
public | 任何类都可以 |
private | 本类 |
缺省 | 本类、同一个包中的类 |
protected | 本类、同一个包中的类、子类 |
五.方法重载
定义多个方法名相同但参数列表不同(参数个数,类型,或者参数的顺序不同)的方法。
如:
//添加俩个方法重载:
void setInfor(String name,int age){
setName(name);
setAge(age);
}
void setInfor(int age,int ID){
setName(name);
setID(ID);
}
六.构造方法
java语言使用构造方法在创建对象的时候为其赋值,其方法名必须与类名相同,且没有返回值,不可用void修饰。可以有参数也可以没有参数,有参数列表时,一般与类的成员变量相对应。
如:
//无参构造:(也称默认构造方法,java编译器自动生成)
Student(){}
//有参构造:
Student(int ID,String name,int age){
this.ID=ID;
this.name=name;
this.age=age;
}