Java类的基本机构(部分)
学习这部分知识之前首先需要了解一下一些抽象的概念:类、对象、属性、方法(函数)。
为了便于理解,我们用一个例子去理解这些概念。我们经常说人类,那么所有的人都归属于一个类,那就是人,人类又是一个非常宽泛的概念,具体到某一个人比如张三,就是人类这个群体中的一个具体的人,即对象;张三会有自己的名字,性别,年龄等等自身的标签,这些标签就是我们说的属性;同时张三在日常生活中会有很多行为:吃、喝、玩等等,这些行为我们称之为方法(函数)。
一:通过这个例子,我们不难总结出以下几点:
1:类是具有相同属性和行为的对象的集合
我们每个人都有自己的名字,性别,年龄等标志每个人的属性,我们每天的行为都会有一样的部分,因此大量的人聚在一起构成一个类:人类。
2:类和对象的关系是什么?
类定义了对象的属性和方法,同时,属性和方法又是对象的本质。
3:类的作用是什么?
类就是一个模板,用来定义多个对象共同的属性和方法。
在实际的开发过程中,我们需要先创建一个类,再去实例化为对象,从而调用其方法,达到我们的目标,同时在分析过程中,我们通常是对某个特定的对象去分析,分析其属性和方法,再去归类。
二:首先就要掌握如何去创建一个类。格式如下:
[访问权限修饰符] [修饰符] class 类名 { 类体 }
具体代码: 这就创建了一个PersonAccount类,代码中对其属性进行声明。
class PersonAccount{ //声明属性(账户账号,密码,余额) String accountId = "123456789"; String pwd = "123456"; double balance; }
三:学会了创建一个类,接下来学习如何创建一个方法。格式如下:
[访问权限修饰符] [修饰符] 返回值类型 方法名 (形式参数列表) { //形式参数就是我们通常所说的变量,只不过要加上变量类型,多个变量中间用逗号隔开
执行语句;
return 返回值; //如果需要通过这个方法得到一个值,就需要用return,不需要值时用void
}
具体代码: 我们在PersonAccount类中创建了一个查看ID的方法,前期学习的时候我们对访问权限修饰符和修饰符不作要求,因此可以略去,后面将会学习。
//查看ID (方法) String getAccountId() { return accountId; }
特别注意:方法中可以调用方法,但不能在方法中定义另一个方法。
- 方法的重载:
在Java里,同一作用域(类)中同名不同参的方法就构成了方法重载。
三大原则:
1:方法(函数)名称相同;2:参数不同(包括数量、类型、顺序的不同);3:同一作用域(类)。
注意:仅返回值类型不同不构成方法重载。
例:
void fun (int x) {...} int fun (int x) {...}
上面这两种方法就不构成方法的重载,我们可以想一下,当我们调用fun这个方法时,系统此时不知道应该进入哪一个方法去执行,就会报错。因此,仅返回值类型不同不构成方法的重载。需要注意的一点是,方法的重载与返回值的类型毫无关系。那么返回值存在有什么意义呢。可以理解为根据具体的开发实例,返回值的存在是为了适应某些特定的业务需求而存在。另外,方法的重载一定是对于具有相同功能的方法,不同功能的方法一定不能进行方法重载。
例:
//存款(需要知道存款金额) void deposit(double amount) { balance = balance + amount; } //存款,活期 void deposit(double amount,int term) { balance = balance + amount; }
上面这两种方法就是对deposit这个方法进行重载,在程序执行过程中,我只需要对这个方法进行传参,比如1:deposit ( 10000 ) 2:deposit ( 10000,12 ),第一个语句胡自动根方法名和形参的情况自动匹配对应的方法,会调用 void deosit (double amount) { } 这个方法,那么第二个语句则会进入下面的方法。也就是说,我们对方法进行重载以后,只需要对它传参,也就是给这个方法具体的参数,系统编译器会自动根据参数的类型和个数及顺序来进入各自对应的函数。可以说Java是一门十分智能和高级的编程语言。
- 构造方法
构造方法生来就是为了对类实例化,也就是创建一个对象。两大特点:1:方法名必须与类名一致;2:无返回值类型
要想使用一个类,实质上也就是使用其中某个对象的方法,我们就必须先去创建一个对象,就需要用构造方法。
[访问权限修饰符] 方法名 (形参列表) { 方法体 }
初学阶段的方法体一般是对属性的初始化(赋予初值),也就是类的实例化。
例:
public class car{ private String color; private double price; public car() { //这就是一个构造方法,没有返回值类型,方法名与类名一致。 } public car(String color) { this.color = color; //this.此处用于区分形式参数,表示类中的属性 } public car(String color,double price) { this.color = color; this.price = price; } }
最后放上一段完整的代码仅供参考,理解学习。
package LF; //创建一个个人账户类 class PersonAccount{ //声明属性(账户账号,密码,余额) String accountId = "123456789"; String pwd = "123456"; double balance; //查看ID (方法) String getAccountId() { return accountId; } //修改密码 (不需要返回值) void setPwd(String newPwd) { pwd = newPwd; } //查看余额 (方法) double getBalance() { return balance; } //存款(需要知道存款金额) void deposit(double amount) { balance = balance + amount; } //存款,活期 , deposit方法的重载 void deposit(double amount,int term) { balance = balance + amount; } }
package LF; public class testAccount { public static void main(String[] args) { /** * 系统默认的构造方法语句 * PersonAccount(){ * } * 写或者不写,这个构造方法都存在 */ PersonAccount account1 = new PersonAccount();//创建一个PersonAccount类的对象: //调用account1里的getAccountId()方法来获取ID System.out.println("account1的ID是:"+account1.getAccountId()); //调用account1里的getBalance()方法来获取余额 System.out.println("account1的余额是:"+account1.getBalance()); account1.deposit(10000); //调用deposit方法存款10000元 //调用account1里的getBalance()方法来获取存款后余额 System.out.println("存款后account1的余额是:"+account1.getBalance()); System.out.println("账户初始密码是:"+account1.pwd); } }