一.类的构造方法(构造函数)
在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。
1. 构造方法的特点如下:
(1)构造方法的名称要与本类的名称相同;
(2)构造方法没有返回值,不用void;
(3)如果没有自定义,就自动提供一个默认构造方法(无参数的构造方法);
(4)主要作用就是初始化对象;
(5)只在构造对象的时候调用。
注意:在定义构造方法时,构造方法没有返回值,但这与普通没有返回值的方法不同,普通没有返回值的方法使用public void methodEx()这种形式进行定义,但构造方法并不需要void关键字进行修饰。
构造方法的定义语法格式如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public book() 2 { 3 4 //...构造方法体 5 6 }
public:构造方法修饰符;
book:构造方法的名称。
在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也将被初始化。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package org.hanqi.pn0120; 2 3 public class Book { 4 //构造方法 5 //方法名和类名 一样 6 //对构造参数而言,没有返回值,不需要加void 7 //只要自定义了构造方法,就不会自动添加默认构造方法 8 Book() 9 { 10 //完成初始化 11 name="默认书名"; 12 } 13 Book(String bookname) 14 { 15 //初始化 16 name=bookname; 17 } 18 Book(String name,String category) 19 { 20 //初始化 21 this.name=name; 22 //this关键字代表类的本身 23 this.category=category; 24 } 25 }
二.成员变量
在Java语言中对象的属性称为成员变量,也可以称为属性。为了了解成员变量,首先定义一个图书类,成员变量对应于类对象的属性,在Book类中设置 name、category和content3个成员变量,分别对应于图书名、图书类别和图书内容这3个图书属性。
语法: 修饰符 数据类型 变量名;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package org.hanqi.pn0120; 2 3 public class Book { 4 5 //属性 成员变量 6 //书名 7 String name; 8 //书的类别 9 String category="其他"; 10 //内容 11 String content="";//不是null 12 }
在Java语言中使用class关键字来定义类,Book是类的名称,同时在Book类中定义了3个成员变量,成员变量的类型可以设置为Java语言中合法的数据类型,其实成员变量就是普通的变量,可以为它设置初始值,也可以不为其设置,如果不设置初始值,则会有默认值。
三.成员方法
在Java语言中使用成员方法对应于类对象的行为。
定义成员变量的语法格式:
极限修饰符 返回值类型 方法名(参数类型 参数名){
...//方法体
return 返回值;
}
成员方法的表现形式:
1.没有返回值(void),没有传入参数()
2.没有返回值,有参数(数据类型 参数名 )
3.有返回值,没有传入参数():返回值类型 方法名(){return 返回的数据;}
4.有返回值,有传入参数:返回值类型 方法名(传入数据类型 参数名){return 返回的数据;}
一个成员方法可以有参数,这个参数可以是对象也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,如果方法需要返回值可以在方法体中使用return关键字,使用这个关键字后,方法的执行将被终止。
成员方法的返回值可以是计算结果也可以是其他想要的数值、对象,返回值类型要与方法返回的值类型一致。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //成員方法 2 //方法的表现形式之一:没有返回值(void),没有传入参数() 3 void print() 4 { 5 System.out.println("讀這本书的書名叫做《"+name+"》的書"); 6 System.out.println("我读的书的内容"+content); 7 } 8 9 //表现形式之二:没有返回值(void),有传入参数(数据类型 参数名) 10 void write(String mycontent) 11 { 12 System.out.println("我写的内容:"+mycontent); 13 14 if(content.length()>=1000) 15 { 16 return; 17 } 18 content +=mycontent; 19 System.out.println("我写完之后的内容:"+content); 20 } 21 22 //表现形式之三:有返回值()没有传入参数 23 String read() 24 { 25 //返回值 不光跳出循环,直接跳出方法 26 return content; 27 28 } 29 30 //表现形式之四:有返回值,有传入参数 31 //卖书 32 //根据卖出的数量计算并返回钱数 33 double sell(int count) 34 { 35 return (price*count); 36 }
四.定义方式
1.class:修饰符 class 类名{ 构造方法;成员变量;成员方法;}
2.package:定义在第一行,一般全小写,范围从大到小,对应目录结构.
类的构造,以Book为例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package org.hanqi.pn0120; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 //构造一本书 7 Book myBook=new Book("JAVA基础教程","java教程类");//默认构造方法 8 9 //myBook.name="JAVA基础教程"; 10 System.out.println("类别="+myBook.category); 11 12 myBook.content="教程类"; 13 14 //myBook.category="JAVA教程类"; 15 16 myBook.content="第一章"; 17 18 String str=myBook.read();//成员方法 19 20 System.out.println("读出的内容="+str); 21 22 myBook.write("JAVA的发展史"); 23 24 str =myBook.read(); 25 26 int c=3;//卖出的本数 27 28 System.out.println("读出的内容="+str); 29 30 System.out.println("卖"+c+"本书的钱数"+myBook.sell(3)); 31 32 myBook.print(); 33 34 System.out.println(); 35 36 37 //第二本书 38 39 Book myBook1=new Book(); 40 41 myBook1.name="战争与和平"; 42 43 myBook1.category="名著类"; 44 45 System.out.println("类别="+myBook1.category); 46 47 myBook1.read(); 48 myBook1.print(); 49 } 50 } 51 52 53
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package org.hanqi.pn0120; 2 3 public class Book { 4 //构造方法 5 //方法名和类名 一样 6 //对构造参数而言,没有返回值,不需要加void 7 //只要自定义了构造方法,就不会自动添加默认构造方法 8 Book() 9 { 10 //完成初始化 11 name="默认书名"; 12 } 13 Book(String bookname) 14 { 15 //初始化 16 name=bookname; 17 } 18 Book(String name,String category) 19 { 20 //初始化 21 this.name=name; 22 //this关键字代表类的本身 23 this.category=category; 24 } 25 //属性 成员变量 26 //书名 27 String name; 28 //书的类别 29 String category="其他"; 30 //内容 31 String content="";//不是null 32 //价格 33 double price=10; 34 //成員方法 35 //方法的表现形式之一:没有返回值(void),没有传入参数() 36 void print() 37 { 38 System.out.println("讀這本书的書名叫做《"+name+"》的書"); 39 System.out.println("我读的书的内容"+content); 40 } 41 42 //表现形式之二:没有返回值(void),有传入参数(数据类型 参数名) 43 void write(String mycontent) 44 { 45 System.out.println("我写的内容:"+mycontent); 46 47 if(content.length()>=1000) 48 { 49 return; 50 } 51 content +=mycontent; 52 System.out.println("我写完之后的内容:"+content); 53 } 54 55 //表现形式之三:有返回值()没有传入参数 56 String read() 57 { 58 //返回值 不光跳出循环,直接跳出方法 59 return content; 60 61 } 62 63 //表现形式之四:有返回值,有传入参数 64 //卖书 65 //根据卖出的数量计算并返回钱数 66 double sell(int count) 67 { 68 return (price*count); 69 } 70 71 72 73 }