对象与类

1、由类构造对象的过程称为创建类的实例(instance)。

2、封装(encapsulation)是与对象有关的一个重要概念,对象中的数据称为实例域(instance filed),操纵这些数据的过程称为方法(method),对于每个特定的类的实例(对象),都有一组特定的实域值,这些值的集合就是这个对象的当前状态(state)。实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。

3、对象的三个主要特性:
a、对象的行为:由可调用的方法定义对象的行为
b、对象的状态:每个对象都保存着描述当前特征的信息,即状态,其可以被对象的行为所改变
c、对象的标识:类的每一个对象都有不同的身份,即标识。

4、类与类之间的关系
a、依赖(uses-a):如果一个类的方法操纵另外一个类的对象,即称为一个类依赖于另外一个类,应尽量减少类之间的依赖,即让类之间的耦合度降低到最小
b、聚合(has-a):聚合关系意味着类A的对象包含类B的对象
c、继承(is-a):如果A扩展于B,不但包含B中继承的方法,还拥有额外的功能,即称为A继承B
面向对象的三大特点:封装、继承、多态

5、对象与对象变量
Date date;声明了一个名为date的对象变量,但它不是对象,它未引用任何对象,任何对象变量都是对存储在另外一个地方的一个对象的引用,new操作符的返回值是一个引用。

6、实例域最好被标记为private,否则这可能会破坏Java的封装性。

7、构造器:当构造一个类的对象时,构造器将会运行,对实例域进行初始化。构造器与类同名;每一个类可以有一个以上的构造器;构造器可以有0、1或多个参数;构造器总是没有返回值;构造器总是伴随着new操作符一起调用。不要在构造器中定义与实例域重名的局部变量。

8、所有的Java对象都是在堆中构造的,而构造器总是伴随着new操作符一起使用的。

9、方法:每一个方法都有两种参数,第一种为隐式参数(implicit),是出现在方法名前的类对象,即调用者对象,第二种位出现在括号中的参数,这是显式(explicit)参数。在每一个方法中,this表示隐式参数。方法的方法名和参数一起被称为方法的签名

10、如果要获取或者设置实例域的值,只需要一个私有的实例域、一个公有的访问器方法、一个公有的更改器方法。不要编写返回引用可变对象的访问器方法,这会有可能改变实例域的私有状态,破坏封装性。

11、在访问器中如果要返回一个可变数据域的拷贝,应使用clone()方法。

12、可以将实例域定义为final,构建对象时必须初始化这种域。

13、静态域:如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域都有一份自己的拷贝,即,如果类A中有一个静态域b和一个域c,那么如果有1000个A的对象,则有1000个实例域c,但只有一个静态域b,即使没有一个A的对象,静态域b依然存在,它只属于类,不属于任何对象。

14、静态常量:即在生明一个常量时将其声明为静态,此后可以用类名直接调用该静态常量。

15、静态方法,不能向对象实施任何操作的方法,换句话说静态方法中没有隐式参数,但是静态方法可以直接访问自身类中的静态域。
静态方法的适用情况:
a、一个方法不需要访问对象状态,其所需要的参数都是通过显式参数提供的。
b、一个方法只需要访问类的静态域

16、方法参数:一个方法可以修改传递引用所对应的变量值,但不能修改传递值调用所对应的变量值,java总是按值调用的,即方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。java中方法参数的使用情况:
a、一个方法不能修改一个基本数据类型的参数
b、一个方法可以改变一个对象参数的状态
c、一个方法不能让对象参数引用一个新的对象

在Java方法中,允许有不定长度的参数,例如:

public static void test(String... args) {  
    for (String arg : args) {  
        System.out.println(arg);  
    }  
} 

使用不定长度的参数有两个规则:
第一,方法的参数列表中最多只有一个不定长度的参数;
第二,不定长度的参数的位置必须是所有参数的最后一个参数

不定长参数实际上是一个数组

17、对象构造:
a、重载:多个方法具有相同的名字,但是有不同的参数,这称为重载。但是不能有两个名字相同,参数相同,但是返回值不同的方法,因为返回值不是方法签名的一部分
b、默认域初始化,如果没有在构造器中对域赋予初始值,则会被赋予默认值,数值为0,布尔为false,对象引用为null。但是方法中的局部变量必须明确地初始化。

18、无参数的构造器:对象由无参数构造器函数创建时,会将域设置为默认值,如果没有编写构造器,则系统会默认提供一个无参构造器。但如果有任何一个构造器,则系统不会自动创建无参构造器。

19、关键字this:this可以用于引用方法的隐式参数,以此来访问类的实例域;this也可用于调用同一个类的另外一个构造器。

20、初始化块:在一个类中可以包含多个代码块,只要构造类的对象,这些块就会被执行。但一般将初始化代码直接放在构造器中。如果一个类中包含静态域,且对静态域初始化的代码比较麻烦,可以使用静态初始化块。如下:

{
name = nextname;
}

static{
Random generator = new Random();
nextname = generator.nextInt(10);
}

21、调用构造器的具体执行步骤:
a、所有的数据域被初始化为默认值
b、按照在类中出现的次序,依次执行所有初始化语句和初始化块
c、如果在构造器中第一行调用了其他构造器,则执行第二个构造器的主体
d、执行这个构造器的主体

22、import关键字可以用于导入静态方法和静态域

23、类注释必须放在import语句之后,类定义之前

24、类的设计技巧:
a、一定要保证数据的私有性,不要破坏封装性
b、一定要对数据进行初始化
c、不要在类中使用过多的基本类型
d、不是所有的域都需要独立的域访问器和域更改器
e、将职责太多的类进行分解
f、类和方法名要能体现其作用

25、内部类:
根据内部类在类中的定义位置不同可以分为:
成员内部类:定义在类中方法外,在其他类中创建该类的对象的格式:
外部类名.内部类名 变量名 = new 外部类名.new 内部类名();
局部内部类:定义在方法中,只能在该方法中使用

26、匿名内部类:
匿名内部类的作用是快速创建抽象类的子类的对象,或接口实现类的对象,代码格式如下:
格式:
第一种:
new 抽象类(){
//重写抽象类中所有的方法
};
第二种
new 抽象类(){
//重写抽象类中所有的方法
}.重写后的方法();
第三种
接口类型 变量名 = new 接口(){
//重写接口中所有的方法
};(多态,向上转型)

27、自动装箱与拆箱
自动装箱规范要求boolean、byte、char<=127,介于-128到127之间的short和int被包装到固定对象中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值