Java学习指南(06) 类

本文是《Java学习指南》原书的网络版,作者邵发,拥有本书的全部权利。相关视频课程在此查看

目录

第6章 类

6.1 新建类

6.2 类的属性

6.3 再说对象与引用

6.4 属性的默认值


第6章 类

6.1 新建类

先给出一个引例。以下是两组学生的信息,要求用代码表示。

学号

姓名

性别

手机号

20171001

王草

18610022345

20171002

李花

13820490902

可以用Java代码表示如下,

// 第一个学生的信息

String id = "20171001";

String name = "王草";

boolean sex = true;

String cellphone = "18610022345";

 

// 第二个学生的信息

String id_2 = "20171002";

String name_2 = "李花";

boolean sex_2 = false;

String cellphone_2 = "13820490902";

显然,这样定义的话变量的个数就非常多。如果有30个学生,那么就得定义120个变量了,name_1 , name_2, name_3 ... 按照这样的命名方式,似乎不太科学。如果能有一个新的数据类型,专门来表示“学生”这种类型就好了!

6.1.1 类

类, class,在Java表示自定义的数据类型。一个class可以是若干基本数据类型的组合,通过新建class,可以表示自定义的类型。

例如,在Eclipse新建一个类 Student.java (按视频演示),其内容如下,

package my;
public class Student
{
    public String id;   // 学号
    public String name;  // 姓名
    public boolean sex; // true: 男 false 女
    public String cellphone; // 手机号
}

其中,

  Student称为类的名称,一般以大写字母开头。

  id, name, sex, cellphone则称为类的属性。和变量的命名规则相同。

直观的理解就是,Student表示学生类型,具有id, name, sex, cellphone四个属性。可以发现,属性可以是int, double, String , boolean 等基本类型。

注:关键字public的意思以后再讲,先抄下来即可,不会影响理解。

 

 

6.1.2 创建对象

在定义了类型之后,就可以创建该类型的对象。例如,

    Student s1 = new Student();
    s1.id = "20171001";
    s1.name = "王草";
    s1.sex = true;
    s1.cellphone = "18610022345";

其中,

  new Student() 表示创建一个Student类型的对象;

  s1.id 表示对象s1的id属性,中间是一个点号

以上代码,是创建一个s1对象,并设置其四个属性的值。

6.1.3 类与对象

什么是类,什么是对象,现在应有一个初步的认识。其实并不复杂,类就是类型的意思,描述了一类事物的特性。而对象则是实际,表示具体的一个事件。

具体类型,“人类”是类,描述了一类事物。“小王”是对象,是一个具体的人。

用代码表示为,

Human someone = new Human();

someone.name = "小王";

其中,Human就是我们添加的一个类型(类似于Student类),而someone则是具体的一个对象。

 

6.1.4 常见错误

以下代码是初学者常犯的一个错误,例如,

  Student.name  = "小王"; // 错误!

这在逻辑上是说不通的,因为Student只是一个类型描述,你不能说“学生”的名字是小王,只能说某个学生的名字是小王。

正确的写法是,

Student stu = new Student(); // 先创建对象stu

stu.name = "小王";              // 再访问对象的属性

先创建对象,然后再访问对象的属性,这是大家要熟练掌握的写法。多写几遍,熟悉一下吧!

6.2 类的属性

类的属性 (Property),描述这个类里有什么。比如,对于一个Student,它应该有学号id 、姓名name等属性。代码如下,

public class    Student
{
    public   String     id;   
    public   String     name;
    public   boolean    sex;
    public   String     cellphone;
}

这里面就定义了4个属性,比如,属性sex的类型为boolean;属性cellphone的类型为String。实际上,类的属性可以int, double, String, boolean等我们学过的基本类型。

6.2.1 类的书写步骤

定义一个类,描述图书的信息。

每一本书都有:

   书名  title   String

   作者 author String

   出版社 press String

   ISBN   ISBN String

   定价  price   double

初学者在定义class时可能会感觉无从下手,其实这个并不困难,按以下的步骤即可:

 先给类起一个名字

v 一般应以大写字母开头

v 要起有意义的名字,"aaa", "abcd123" 这样的毫无意义的名字是不妥的。名字应该能顾名思义,比如Movie可以表示电影,而ActionMovie可以表示动作电影。这样的名字可读性好,让人一眼就能知道它是什么意思。

 再给类添加属性

v 属性名字一般以小写开头,如fontSize, lineHeight

v 属性的类型可仔细选择,可以选择int, double, String, boolean等我们学过的基本类型。

下面,我们新建一个类叫Book,内容如下,

public class Book
{
    public String title;
    public String author;
    public String press;
    public String ISBN;
    public double price;
}

然后看一下怎么使用这个类。一般还是要创建一个对象,然后再访问类的属性。示例代码如下,

Book b = new Book();

b.title = "C/C++学习指南";

b.price = 49.0;

// 其他属性也可以设置一下 ...

6.2.2 编程世界里的类

在初学阶段,通常用自然界实际存在的物体来做示例。但我们需要知道,编程世界里的类,大多数不对应自然界的物体。

比如说,定义一个类,它能够把输入的数据压缩。

public class ZipTool

{

}

显然,这个ZipTool并不对应自然界中的东西

6.2.3 类的嵌套书写

实际上,一个类的属性可以是基本类型(int, double, String, boolean...),也可以是自定义的类型。

比如,每个学生,除了有学号、姓名、手机号等基本信息之外。还绑定了一个校园卡、一个银行账号。

首先,定义一个类StudentCards表示卡号信息,

public class StudentCards
{
     public String schoolCardNumber;
     public String bankCardNumber;
}

然后,在Student类中加入cards属性,

public class Student
{
    public String id;
    public String name;
    public boolean sex;
    public String cellphone;
    public StudentCards cards = new StudentCards();
}

最后,创建对象并设置属性的值,

    Student s1 = new Student();
    s1.cards.schoolCardNumber = "T92830430";
    s1.cards.bankCardNumber = "34989989289988290";

其中,s1.cards.bankCardNumber就表示访问s1的cards的bankCardNumber属性。

6.3 再说对象与引用

在上一章里已经初步介绍了对象和引用的概念。这一节课再加深一下印象。

观察以下代码,

Student s1 = new Student();

这一行的右侧创建了一个对象,而s1指向了这个对象。这就比如,右边生了一个宝宝,左侧给它取了一个名字。

Student s2 = s1;

这一行相当于给这个宝宝再起一个名字,一个乳名一个学名,并不过分。这两个名字指向的同一个宝宝。

s2.name = "邵发";    

由于s1和s2指向的是同一个对象,所以修改s2.name,其实就是修改了s1.name。

6.3.1 空对象与空指针异常

如果一个引用指向null,其实是说它不指向任何对象。例如,

 

  Student s1 = null;

  s1.name = "邵发" ;   // 出错!! NullPointerException

在这里,s1指向了null,所以试图访问s1.name是错误的。它本身就是个空,当然就不能访问它的属性啦!

6.4 属性的默认值

在Java语言里,每一种类型的对象都有其默认值,

v 整数类型(long int short byte):默认值为 0

v 小数类型(double float):默认值为 0.0

v boolean类型:默认值为 false

v 引用类型 (String, Student..) : 默认值为 null

v 数组类型:默认为null

看起来没有规律可循,但实际上可以告诉大家,其本质上都是零的意思。比如说,false和null本质上就是个0。

如果实在不能理解,或者不确定其默认值,那么我们在定义一个变量或属性的时候,可以显式的指定初始值。例如,

public class Student
{
    public String id = "00000000";
    public String name = "未命名";  
    public boolean sex = true;
    public String cellphone = "";
}

如果是自定义的类型,那么可以new一个对象,例如,

public class Student
{
    public String id = "00000000";
    public String name = "未命名";  
    public boolean sex = true;
    public String cellphone = "";
    public StudentCards cards = new StudentCards ();
}

也可以后创建对象,例如,

    Student stu = new Student();
    stu.cards = new StudentCards ();
    stu.cards.bankCardNumber = "239230923901234";

不管怎么写,我们都需要保证在访问stu.cards.bankCardNumber的时候,stu.cards不能为null,否则就会出NullPointerException错误了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿发你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值