首页 > 编程知识 正文

java面向对象类与对象,java面向对象程序设计第二版

时间:2023-05-05 14:42:14 阅读:173044 作者:3754

类是对象的抽象。

这是类和对象的关系,用这个词可以知道什么是类,什么是对象。 如果有手机这个级别的话,对象就是客观存在的手机实体。

1、类的定义

1.1类定义语法

修饰符class类名{

从零到多个成员变量(field )

从零到多个构造函数

从零到多种方法

}

1修饰符可以是public、final、abstract或完全省略。 类名遵循标识符的命名规则

2定义成员变量的语法表达式。 【修饰符】类型成员变量名【=默认值】; 角色:定义类或类的对象中包含的状态数据

*限定符:可以省略限定符,也可以是公共保护专用文件。 其中只出现一个publicprotectedprivate,也可以与staticfinal组合使用来限定成员变量

*类型:可以是Java允许的任何数据类型

*成员变量名:遵循标识符命名约定

*默认值:成员变量可以是可选的默认值

3生成器是一种特殊的方法。

角色:用于为类创建对象,如果类没有构造函数,则无法创建对象。 如果程序员没有创建构造函数,系统将默认不参与该类的构造函数。 如果程序员创建了构造函数,则系统不会提供不参与该类的构造函数。

构造函数语法:【限定符】定义构造函数名称(形状参数列表) )

由//零到多个可执行语句组成的构造函数执行体

}

*修饰符:公共保护权限之一或省略

*构造函数名称:必须与类名相同

*形参数列表:格式与方法的形参数列表相同

无参数构造函数和有参数构造函数:通过使用无参数构造函数创建对象而创建的对象只是堆内存中的缺省地址,属性值为缺省值。 除了堆内存的缺省地址外,通过参数生成方法创建的对象还具有在堆内存中引用的值。

构造函数不能定义返回值的类型,也不能使用void关键字声明构造函数没有返回值。 如果不这样做,编译也不会出错,但Java会将此所谓的构造函数作为普通方法对待。 这样就不是构造函数了。 实际上,构造函数有返回值,返回值是对象的实例。 返回是隐式的,因此不能用return返回当前类的对象。

让我们创建一个类。

1 public class user {2public string name; 3公共intage; 4公共用户({5}

6}7publicuser(stringname,intage ) {8 this.name=name; 9 this.age=age; 10 ) 11公共void eat (() {12 System.out.println ) )“吃法”); 13 }14 }

2、创建和使用对象

2.1创建对象

创建对象的基本方法是构造函数,可以通过使用new关键字调用类的构造函数来创建类的实例。

User u; 使用User类定义该类的变量

u=new User (; 使用//new关键字调用User类的构造函数并返回User实例。 将返回的实例指派给p变量。

2.2使用对象

对象角色:访问对象的实例变量和调用对象的方法

*如果权限允许,则可以从类或实例中调用类中定义的方法和成员变量。 访问类或实例的方法或成员变量的语法是类.类变量/方法或实例.实例变量/方法。 静态限定的方法和成员变量可以通过聆听类来调用,也可以通过实例来调用。 未由静态限定的方法和成员变量只能从实例中调用。

3、对象、引用和指针

Userp=new User (;

此代码创建分配给u变量的User对象的User实例。 代码生成两个变量: User实例和p变量。 使用以下两个图来说明这两个东西是如何存储在内存中的。

如上图所示,User对象由多个存储器组成,不同的存储器块包含User对象的不同成员变量。

那么,如何将此对象指定给引用变量呢? 如下图所示

类也是引用数据类型,因此程序定义的User类型的变量实际上是引用,并存储在堆栈存储器中。 堆栈存储器中的引用变量实际上不存储对象的成员变量。 从这个角度来看,引用变量类似于C语言的指针,它们都存储地址值,并从该地址引用实际对象。 实际上,在Java中的引用是令人发指的。 但是,Java语言封装了此指针,以避免开发人员执行麻烦的指针操作。 成功创建对象后,该对象将保存在堆内存中。 Java程序不允许直接访问堆内存中的对象,只能通过对对象的引用进行操作。 当p访问成员变量和方法时,实际上是p引用的对象的成员变量和方法。

堆内存中的对象可以有多个引用。 这意味着多个APP应用程序变量指向同一对

4、对象的this引用和static关键字

*static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明该成员属于这个类本身,而不属于该类的单个实例,因此把static修饰的方法和成员变量称为类方法或者类成员。把static修饰的方法和成员变量称为实例变量或者实例方法。静态成员不能直接访问非静态成员。有static修饰的成员属于类本身,没有static修饰的成员属于实例。

根据this出现的位置不同,this作为对象的默认引用有两种情形:构造器中引用该构造器正在初始化的对象、在方法中引用调用该方法的对象。

实际上this最大的用途是让类中的一个方法,访问该类里的另一个方法或实例变量,但是this在使用的时候往往被省略,最大的一个作用表现的很含蓄。

来看这段代码,之前不是说没有static修饰的方法只能用对象来调用吗?为什么下面的代码在没有static修饰的jump方法可以直接调用run方法吗?实际上就像注释写的那样是将前面的this给省略掉了,this是run方法的主调者。

1 public classDog {2 public voidrun(){3 System.out.println("跑的方法");4 }5 public voidjump(){6 run();//this.run();

7 System.out.println("跳得方法");8 }9

10 }

对于static修饰的方法而言,则可以使用类来直接调用该方法,如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰的方法不能访问不使用static修饰的普通成员,因此Java语法规定:静态成员不能直接访问非静态成员。

大多数this可以省略,但是当防止局部变量与成员变量重名可以加上this。

4、深入构造器

4.1使用构造器初始化对象

构造器的最大作用就是在创建对象时进行初始化。

如果程序员自定义了构造器,那么系统就不会默认提供无参构造器

通常使用public 作为构造器的修饰符。

4.2 构造器重载

这个地方有这么一个问题,如果定义了多个构造器,但是A构造器的参数列表完全包含了B构造器的参数列表,同时执行体也完全包含了B构造器的执行体。那么这个时候就可以使用this关键字来在B构造器中调用A构造器。

1 public classPerson {2 public intnum;3 publicString name;4 publicString sex;5

6 publicPerson() {7

8 }9

10 public Person(intnum, String name, String sex) {11 this(num, name);12 this.sex =sex;13 }14

15 public Person(intnum, String name) {16 this.num =num;17 this.name =name;18 }19

20 }

使用this调用另一个重载构造器只能在构造器中使用,而且必须作为构造器执行体的第一句语句。使用this调用重载构造器时,系统会根据this后面括号里面的实参来匹配具有相同形参的构造器。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。