Chapter 4 Defining Classes I
4.1 Class Definitions
(1)object(对象)
A value of a class type is called an object.An object has both data and actions. Each object can have different data,but all objects of a class have the same types of data and all objects in a class have the same methods (每个对象都有相同的方法,和数据类型,但是数据的具体值不同,对象就是类的一个值。一般都说声明一个类的对象,对象可以使用类中定义好的函数,比如String s = " hello"; 则s就是一个String的对象,它可以使用方法length()等 --> s.length(); )
(2)method(方法)
The actions are called methods.
a. 声明一个无返回值的函数的heading
public void Method_Name(Parameter_List)
b. 声明一个有返回值的函数的heading---但是要注意返回的值的类型必须相同,但是可以是任意的数据类型
public Type_Returned Method_Name (Parameter_List)
比如:public double myMethod() 返回的是double
double d = anObject.myMethod();
public String yourMethod() 返回的是String
String aStringVariable = anObject.yourMethod();
c. return statement
如果具有返回值的函数,在body中必须有一个return语句,比如:return Expression; expression 必须和函数heading中的类型相同。如果没有return语句就会报错。
如果是void的函数,也可以使用return;结束该函数的内容,
d. parameters (参数)
上面提到的函数中heading的函数,都是类似myMethod() 的形式,也就是调用该函数是无参数的,当让我们调用一个函数的时候也可以给它传递参数,(A parameter is like a blank that is filled in with a particular value when the method is invoked)
argument: the parameter is called an argument; For example, the string "Hello" is the argument to the method println in the following method invocation: System.out.println("Hello");
但是要注意,传递的参数的类型必须和heading中定义的类型相同,或者可以自动转换。比如heading定义的是double,但是传递的是int,也可以。
(3)member(成员)
无论是类中定义的方法还是数据,都是class的成员
(4)创建一个类
声明和创建一个自定义类的对象的方法:
例子:创建一个DateFirstTry的类。注意其中有3个data,和一个方法。
a. 对类中data的使用和说明:
像使用string和int变量的一样进行赋值和使用,只是表达形式是data1.month表示的是data1这个变量中month这个数据
For example, date1.month can be used just like any other variable of type String . The instance variables date1.day and date1.year can be used just like any other variables of type int .
b. 对方法进行说明
方法分为 头部 heading 和方法体 body;
heading部分中:void表示该函数没有返回值,只需要执行完即可,后面的writeOutput()是方法名;使用的时候只需要用该类的对象加“ .” 即可。date1.writeOutput();
(5)this
作用:you can use the keyword this as a name for the calling object
比如:
等同于
也等同于
同理:
改成:
(6) toString 和 equals
4.2 information hiding and encapsulate
(1)信息隐藏
意味着使用该类和定义该类无关,我们可以直接使用别人定义好的类,只需要在开始的时候import就好了,
(2)encapsulate (封装):
(3)API
(4)ADT
4.3 public & private Modifiers
(1)public
如果在变量前使用public:The modifier public means that there are no restrictions on where the instance variable can be used.
如果在method前使用public:If the method is labeled public , there are no restrictions on its usage.
(2)private
如果在变量前使用private:The modifier private means that the instance variable cannot be accessed by name outside of the class definition.
Once you label an instance variable as private , there is then no way to change its value except by using one of the methods belonging to the class
如果在method前使用private:If the method is labeled private , the method can only be used in the definition of another method of the same class.
4.4. Accessor and Mutator Methods (访问器和转换器)
These are methods that allow you to access and change the data in an object, usually in a very general way.
(1)Accessor methods
Accessor methods allow you to obtain the data,比如: getMonth(), getDay(), and getYear()
(2)Mutator Methods
Mutator methods allow you to change the data in a class object. 比如:set()函数
4.5 overloading
(1)介绍:方法名字相同时,但是参数不同的情况(参数个数不同,参数的类型不同等)
(2)例如:
说明:
Notice that each method has a different parameter list. The first two differ in the type of their first parameter.
The last one differs from the other two by having a different number of parameters.
(3)使用:
当对象调用这个函数,比如上面的setDate的时候,机器会根据调用该函数的对象传参的不同,而选择不同的参数,比如a.setDate(1); 那么就是调用第三个函数 public void setDate( int year);
4.6 Constructors (构造函数/构造器)
(1)介绍
A constructor is a special variety of method that is designed to perform such initialization.(初始化类中的instance variables)
当你使用DateSixthTry date1 = new DateSixthTry(); 的时候,new DateSixthTry();就是在调用一个默认的构造器;也就以为这,如果user不自己进行构造器的定义的话,程序也会自动生成一个,然后自己调用。
(2)使用
必须要注意的是,在使用的时候需要overloading,因为构造的要求是必须和该类class 的名字相同,
比如
两种方式使用:
(1)使用set的方法
birthday.setDate("January", 27, 1756);
该语句只是改变了该对象的值或者说在赋值。但是对象本身的空间等没有被重新分配
(2)创建该对象的时候,new一个对象的时候,
Date birthday = new Date("December", 16, 1770);
birthday = new Date("January", 27, 1756);
但是要注意的是:它在设置实例变量之前丢弃旧对象并为新对象分配存储。
4.7 Default Variable Initializations
(1)local variable & instance variable
对于local variable来说,在使用的时候必须给他初始化,系统不会自动给他一个默认值
但是对于instance variable来说,系统会给予默认值,当user不给他确定值的时候;
boolean 默认是 false; string默认是null;int 默认是0
(2)如果给类的instance variable变量写上固定的值,那么就不会调用构造器了。
(3) StringTokenizer class
该类相当于Scanner 中的nextLine()等方法,就是用来读取input的。并且处理后输出。
常用方法: