java学习2类

2020-05-19 13:52:58

1.类之间的关系

依赖:如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类

聚合:类A的对象包含类B的对象

继承:如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能

2.对象与对象变量,只有赋值的对象变量才能够将对象的相关方法应用上去

3.构造器总是伴随着new操作符的执行被调用,不能够对一个已经存在的对象调用构造器来达到重新设置实力域的目的

4.不要在构造器中定义与实例域重名的局部变量

5.方法的隐式参数是方法名前的对象,方法的显示参数是方法名后面括号的中的数值,在每一个方法中,关键词this表示隐式参数

6.final实例域,构造对象时必须初始化这样的域,也就是说,必须确保在每个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够在对它进行修改

7.final修饰符大都于基本类型域,或不可变类的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类,例如,string类就是一个不可变的类)

8.对于可变的类

private final StringBuffer evaluations;

final关键字指示表示存储在evaluations变量中的引用不会再指示其他StringBuffer对象,不过这个对象可以更改

9.如果将域定义为static,这个类的所有对象将共享一个静态域,它属于类,而不属于独立的对象

10.静态常量static final修饰,被声明后,无法在修改其值

11.静态方法是一种不能向对象实施操作的方法,换句话说,静态方法没有隐式参数

12.静态方法可以访问自身类中的静态域,它不能够访问自身的实例域,因为它不能够操作对象

13.可以使用对象调用静态方法,但是这种方式很容易造成混淆,原因是调用方法所计算的结果与对象毫无关系,所以不建议使用对象调用静态方法

14.使用静态方法的两种情况

一个方法不需要访问对象状态,其所需参数都是通过显式参数提供

一个方法只需要访问类的静态域

15.工厂方法

localDate类和NumberFormat类使用静态工厂方法类构造对象

为什么NumberFormat类不利用构造器完成这些操作,这里有两个原因:

无法命名构造器。构造器的名字必须与类名相同,但是,这里希望将得到的货币实例和百分比实例采用不同的名字

当使用构造器时,无法改变所构造的对象类型。而Factor方法将返回一个DecimalFormat类对象

16.方法参数

按值调用,表示方法接收的是调用者提供的值

按引用调用,表示方法接收的是调用者提供的变量地址,一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用的值

17.java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝

18.总结java中方法参数的使用情况

一个方法不能够修改一个基本数据类型的参数

一个方法不能让对象参数引用一个新的对象

19.重载,如果多个方法有相同的名字,不同的参数,便产生了重载

方法的签名,要完整的描述一个方法,需要指出方法名以及参数类型,返回类型不是方法签名的一部分,也就是说,不能够有两个名字相同,参数类型也相同却返回不同类型值的方法

20.如果早构造器中没有显式的给域赋初值,那么就会自动的赋为默认值,数值是0,布尔值是false,对象引用为Null;

这是域和局部变量的主要不同点,必须明确的初始化方法中局部变量,但是如果没有初始化类中的域,将会被自动初始化为默认值。

21.如果在编写一个类时没有编写构造器,那么系统就会提供一个无参数的构造器,这个构造器中将所有的实例设置为默认值;如果提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。

22.可以在类的定义中,直接将一个值赋给任何域,在执行构造器之前,先执行赋值操作;初始值不一定是常量值,可以调用方法对域进行初始化

23.如果构造器的第一个语句形如this(.....),这个构造器将调用同一个类的另一个构造器,这样会对公共的构造器代码部分只编写一次即可

在使用this()构造器时,this()中的参数顺序和个数确定所调用的构造器,如果本构造器的参数被传到this()构造器中,相当于调用另一个构造器(将调用构造器的域设置为相关值)后,更新本构造器中的相关域

 24.初始化块,只要构造类的对象,初始化块就会被执行,首先运行初始化块,然后才运行构造器的主体部分,如果在构造器中对初始化块中的 域进行重新赋值,那么会更新相关域的值

在类第一次加载的时候,将会进行静态域的初始化

调用构造器的具体步骤:

所有数据域被初始化为默认值(0,false,或null)

按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块

如果构造器第一行调用了第二个构造器,则执行第二个构造器主体

执行这个构造器主体

25.使用包将类组织起来,使用包的主要原因是确保类名的唯一性,将类名相同的类放置在不同的包中,就不会产生冲突

从编译器的角度来看,嵌套的包之间没有任何关系

26.一个类可以使用所属包中的所有类,以及其它包中的公有类(public class),有两种方式访问另一个包中的公有类

在每个类名前添加完整的包名

使用Import语句导入一个特定的类或者整个包

27.import语句不仅可以导入类,还增加了导入静态方法和静态域的功能,在要导入包的前面,加上static就可以使用相关类的静态方法和静态域,而不必加前缀

28.一个源文件只能有一个公有类,并且文件名必须与公有类匹配

当然,也可以从当前包中导入非公有类,这些类可能会定义在与类名不同的源文件中,如果从当前包中导入一个类(默认存在,不用import),编译器就会搜索当前包中所有源文件,以方便确定那个源文件定义了这个类

 

 28.访问修饰符

标记为public的部分可以被任意类使用,标记为private的部分只能被定义他们的类使用,如果没有指定public或private ,这个部分(类,方法或变量)可以被同一个包中的所用方法使用

posted @ 2020-05-19 13:53  gaoboss  阅读(105)  评论(0编辑  收藏  举报