一、类的基本概念
1、类与对象
(1)类和对象概念
类:对某一类事物的描述,是抽象的、概念上的定义
对象:实际存在的属该类事物的具体的个体,因而也称为实例(instance)
类是对象的模板、图纸;对象是类的一个实例,是实实在在的个体。一个类可以对应多个对象。
(2)类的构成:数据成员+函数成员
- 数据成员:域变量、属性、成员变量等。表示类的属性。
- 函数成员:成员方法、方法等。描述对象的行为。
二、定义类
1、类修饰符:4种
修饰符 | 含义 |
---|---|
public | 将一个类声明为公共类,它可以被任何对象访问 |
abstract | 将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例 |
final | 将一个类声明为非继承类,表示它不能被其他类继承 |
缺省 | 表示只有在相同包中的对象才能使用这样的类 |
注意:同一个Java程序内,若定义了多个类,则最多只能有一个类声明为public,这种情况下文件名称必须和声明成 public 的类的名称相同。
2、成员变量
(1)格式
[修饰符] 变量类型 变量名 [=初值];
(2)成员变量的修饰符
4种访问控制符+4种修饰符
修饰符 | 含义 |
---|---|
public | 公共访问控制符。指定该变量为公共的,它可以被任何对象的方法访问 |
private | 私有访问控制符。指定该变量只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量。 |
protected | 保护访问控制符。指定此变量只可以被它自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量 |
缺省 | 缺省访问控制符。表示同一个包中的其他类可以访问此变量,而其他包中的类不能访问该变量 |
final | 最终修饰符。指定此变量的值不能改变 |
static | 静态修饰符。指定此变量被类的所有对象共享,即所有的实例都可以使用该变量 |
transient | 过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量 |
volatile | 易失修饰符。指定该变量可以同时被几个线程控制和修改 |
3、成员方法
(1)成员方法修饰符
修饰符 | 含义 |
---|---|
public | 公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问 |
private | 私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法。 |
protected | 保护访问控制符。指定此方法只可以被它自己的类及其子类或同一包中的其他类访问 |
缺省 | 缺省访问控制符。表示同一个包中的其他类可以访问此成员方法,而其他包中的类不能访问该成员方法 |
final | 最终修饰符。指定此方法不能被重载 |
static | 静态修饰符。指定不需要实例化一个对象就可以调用的方法 |
abstract | 抽象修饰符。指定该方法只声明方法头,而没有方法体,抽象方法需要在子类中被实现 |
synchronized | 同步修饰符。在多线程程序中,该修饰符用于对同步资源加锁,以防止其他线程访问,运行结束后解锁 |
native | 本地修饰符。指定此方法的方法体是由其他语言(如C)在程序外部编写的 |
4、成员变量与局部变量的区别
成员变量:属于类的变量
局部变量:属于方法的变量
(1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被访问控制符(public、private、protected)、static修饰符修饰,而局部变量则不能被访问控制符与static修饰。
注:成员变量和局部变量都可以被final修饰
(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在堆内存中,而局部变量存在于栈内存中
(3)从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失
(4)成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值,必须显示地赋值后才能使用
三、对象的创建与使用
使用类创建对象,可以将对象理解为一种新型的变量。对象一旦完成了他的工作,将被销毁,所占用的资源将被系统回收以供其他对象使用。
1、创建对象
与数组创建类似
2、对象的使用
注:Java程序中有n个类,编译后产生n个.class文件
3、在类定义内调用方法
this关键字
四、参数的传递
this指定成员变量,用于区分成员变量和局部变量。
注意:当参数是基本数据类型时,则是传值方式调用;当参数是引用型的变量时,则是传址方式调用。
五、匿名对象
1、概念
当一个对象被创建之后,在调用该对象的方法时,不定义对象的引用变量,而直接调用这个对象的方法,这样的对象叫做匿名对象
2、场景
(1)一个对象只需要进行一次方法调用
(2)将匿名对象作为实参传递给一个方法调用