类和对象
面向对象思想是人类最自然的一种思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及展示这些对象的的行为,以解决这些对象面临的一些实际问题,这样就在程序开发中引入了面向对象设计的概念,面向对象设计实质上就是对现实世界的对象进行建模操作。
对象:对象是事实存在的实体,通常将对象划分为两部分,静态部分和动态部分,静态部分为“属性”,动态部分为"行为"。
类:类就是同一类事物的统称经。类是构造对象时所依赖的规范,对象就是符合某类的定义所产生出来的实例。更为恰当的描述是,类是世间事物的抽象称呼,而对象则是这个事物相对应的实体。
类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体称为类。
面向对象程序设计的三大特点:封装性、继承性、多态性。
封装性:封装是面对对象编程的核心。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。
封装的作用:保证了类内部数据结构的完整性,应用该类的用户不能轻易地直接操作此数据结构,只能执行类允许公开的数据。这样就避免了外部操作对内部数据的影响,提高了程序的可维护性。
继承性:利用特定对象之间的共有属性。
多态性:多态的实现并不依赖于具体类,而是依赖于抽象类和接口。
1. 类
1.1 成员变量
Java中对象的属性也被称为成员变量。
public class Book {
private String name; //定义了三个成员变量:name,id,category
private int id;
private String category;
public String getName() //定义了一个getName()方法
{
int id=0; //方法内的局部变量
setName("Java"); //调用类的成员方法
return id+this.name; //类里使用this.name表示Book类的成员变量name。
}
public void setName(String name) //定义了一个setName()方法,作用是将传入的参数name传递给成员变量name
{
this.name=name;
}
public Book getBook() // 在类里声明了一个返回值为Book类的方法,返回Book类的引用
{
return this;
}
}
1.2 成员方法:
Java中成员方法对应于类对象的行为。
定义成员方法的语法格式如下:
权限修饰符 返回值类型 方法名(参数类型 参数名)
{ ...//方法体
return 返回值;
}
在Book类中的成员方法有: getName()、setName()、getBook()。
public String getName() //定义了一个getName()方法
{
int id=0; //方法内的局部变量
setName("Java"); //调用类的成员方法
return id+this.name; //类里使用this.name表示Book类的成员变量name。
}
public void setName(String name) //定义了一个setName()方法,作用是将传入的参数name传递给成员变量name
{
this.name=name;
}
public Book getBook() // 在类里声明了一个返回值为Book类的方法,返回Book类的引用
{
return this;
}
1.3 权限修饰符
Java中的权限修饰符主要包括private、 public、protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问。
| 类修饰符 | 本类 | 同包类或子类 | 其他包类或子类 |
|---|---|---|---|
| private | 可见 | 不可见 | 不可见 |
| protected | 可见 | 可见 | 不可见 |
| public | 可见 | 可见 | 可见 |
ps:当声明类时,未使用权限修饰符时,默认为protected,即只有同包中的类和子类能够调用这个类的成员变量或成员方法。同时类的权限修饰符会约束类成员的权限设定,即如果类修饰符为protected,成员方法权限修饰符为public,但是其他包的类或子类同样无法调用此类方法。
实例:
class Angclass(){
public void doString()
{ ...//方法体
}
}
等价于:
class Angclass(){
void doString()
{ ...//方法体
}
1.4 局部变量
在成员方法内定义的变量称为局部变量。如果局部变量和成员变量同名,在该方法的方法体内,起作用的变量为局部变量。
局部变量在方法执行时创建,在方法执行结束后被销毁。即局部变量的作用域为该变量声明开始到该变量的结束为止。局部变量在使用时必须进行赋值操作或初始化,否则会出现编译错误。
2.类的构造方法
构造方法是一个于与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。
构造方法的特点:
(1)构造方法没有返回值;
(2)构造方法的名称要与本类的名称相同。
可以使用this关键字调用构造方法:
public class Anything {
public Anything()
{
this("this 调用有参构造方法");
System.out.println("无参构造方法");
}
public Anything(String name)
{
System.out.println("有参构造方法");
}
public static void main(String[] args) {
Anything at=new Anything();
}
}
运行结果为:

3. 静态变量、常量和方法
static关键字: 由static修饰的变量、常量和方法被称做静态变量、常量和方法。静态成员同样遵循public、private、protected修饰符的约束。
在Java语言中对静态方法有两点规定:
- 在静态方法中不可以使用this关键字;
- 在静态方法中不可以直接调用非静态方法。
4. 对象
4.1 对象的创建
Java中通过new操作符来创建对象。
Test test =new Test();
test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间。每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。
public class Transfer {
int i=20;
public void call()
{
System.out.println("调用call()方法");
for (i=0;i<3;i++)
{
System.out.print("["+i+"]");
}
System.out.println();
}
public Transfer()
{
System.out.println("调用构造方法");
}
public static void main(String[] args) {
Transfer t1=new Transfer();
Transfer t2=new Transfer();
System.out.println("t1的变量i="+t1.i);
t1.call();
t2.i=40;
System.out.println("t2的变量i="+t2.i);
t2.call();
}
}
运行结果:

4.2 对象的销毁
对象被JVM视为垃圾的情况:
- 对象引用超过其作用范围;
- 将对象赋值为null。
Java中提供了一个finalize()方法,这个方法时Object类的方法,被声明为protected,用户可以在自己的类定义这个方法。用于垃圾回收,管理内存。
System.gc()方法强制启动垃圾回收器。
修饰符总结:
static修饰符特点:
非静态的成员方法:
- 能访问静态的成员变量;
- 能访问非静态的成员变量;
- 能访问静态的成员方法;
- 能访问非静态的成员方法。
静态的成员方法: - 能访问静态的成员变量;
- 能访问静态的成员方法。
final修饰符特点:
- 修饰方法,则该方法无法重载;修饰变量,则变量不能被赋值;修饰类,类不能被继承。
- final修饰局部变量,变量为基本类型时,final修饰是指基本类型的数据值不能发生改变;修饰引用类型,final修饰是指引用类型的地址值不能发生改变,但是地址里面的内容可以发生改变

浙公网安备 33010602011771号