Java入门—学习笔记[3]

来源:互联网 发布:克克录音软件 编辑:程序博客网 时间:2024/05/18 11:16

1、类: 构造对象的模板。我的理解是某一些具有共性的事物的归纳。比如说,小张、小钟和小夏,是一个特定的对象,但是可以归并一个更抽象的概念中,


2、对象: 具体特定一个实例,是人有很多,但是叫小钟(名字唯一)只有一个。包括行为、状态和标识符。


3、实例: 我们把一个是人的对象可以确定为一个为具体的人的过程。


4、封装: 针对于对象而言,把数据和行为封装在一起。提供重用性和可靠性。


5、识别类: 经验原则,“找名词和动词”。


6、类之间的关系: 常见的有依赖、聚合和继承


7、构造一个新的对象: (1)Date birthday = new Date();//birthday对象变量,Date()是类Date中的构造方法(器),与类名相同。new Date()表示创建了一个新对象。这里使用了对象变量,是为了多次使用。(2)System.out.println(new Date(0);表示可以把一个对象传递给方法。(3)String s = new Date().toString();表示可以将一个方法用在刚创建对象上。注意:对象变量不是对象,仅仅是应用一个对象,需要初始化。所以new 返回的值是一个引用。若对象变量设置为null,表示没有引用任何变量。不能进行相关的操作。但可以使用new 重新初始化。


8、时间点与日历: 表示时间点的类Date,日历表示法的 GregorianCalendar类。时间与日历分开是一种很好的面向对象的方法。


9、更改器方法(mutator method): 对实例域进行修改的方法,比如set()。


10、访问器方法(accessor method): 仅对实例域作出访问的方法,比如get()。在C++中,这个方法一般带有const后缀。没有则是更改器方法。


11、主力类(workhorse class): 没有main()方法,但却有自己定义域和实例方法


12、一个源文件: 只能有一个public类,可以有任意多个非public类。多个源文件的就是每个类就是一个源文件,编译为javac Employee.*.java,以Employee开头的所有源文件。


13、构造器: 构造器与其他方法不一样的地方就是,总是伴着new操作符的执行而被调用,因为Java中的所有对象在堆中构造。但不能对一个已存在的对象调用构造器重新设置实例域。注意:,不要在构造器中声明与类中实例域中重名的局部变量。


14、显示参数(explicit )和隐式参数(implicit): 在一个方法中,隐式参数是在方法之前就已经出现的参数,比如对象的实例域的,经常可以使用this指示;在方法名中括号的数值,是显示参数。


15、内联方法(inline function): 在C++中,方法一般是在类外定义,若是定义在类中,自动地成为内联方法;而在Java中,所以的方法都在类内定义,但不能说明是内联方法,因为这种事情完全是Java虚拟机的任务。


16、对象克隆: 主要防止在一个类中,有些方法可能返回一个引用可变的对象,这个时候,可以拷贝对象,例如 return hireDay.clone();


17、静态域: 属于类,不属于任何一个由类实例化的对象。例如:private static in nextId;静态变量,但用的比较少。


18、静态常量: 比如数学中的PI,通常声明为静态常量,使用比较多。如果没有static,常量就会变成一个对象域,也就是对象值,有多少个对象,就会出现多少次实例域。(1)另一个常见的静态常量是System.out,因为在System类中的声明是public static final PrintStream out = …..。以前我们也说过,最好不要把实例域设置为public,但是公有变量(final域)没有问题。(2)有一个值得注意的是,在这个中有个setOut()可以final值,也就是out,原因在于setOut是一个本地方法,可以绕过java语言的存取机制,这么特殊的方法,自己在写程序不要这么做。


18、静态方法: 静态方法不能操作对象,也就是说不能访问实例域(区别于静态域),但是可以访问自身类中的静态域。在类中,静态方法没有隐式参数,也就不含this参数的方法。例如:public static int getNextId(), 可以直接使用类名调用,int n = class.getNextId();。也可以省略static,这个时候需要对象来调用。注意:(1)虽然说可以使用对象调用静态方法,但是并不推荐这种方式,还是使用类名调用。(2)使用static方法的情形,不访问对象的状态,只使用显示参数,比如Math.Pow();只需要访问类中的静态域。(3)另一个常见用途是工厂类方法。


19、main方法: main为什么前面加static,是因为,是因为mian方法不需要对任何对象进操作。在程序启动时,是没有任何对象的。技巧:单元测试,每个类中都有一个main()。


20、方法参数: 在java中,一般来说,总是按值调用。这一点上和引用调用不同的。不会改变的参数的值。


21、重载(overloading): 如果有多个方法,比如(构造方法),拥有相同的方法名字、不同的参数,称之为overloading。重载解析:编译器在编译时,根据各个方法的参数类型挑选方法。


21、方法签名(signature): 完成描述一个方法需要方法名+参数类型,但是返回类型不是signature的一部分。


22、默认域初始化: 如果你是一个编程经验不足的人,经常做不到显示地初始化域值。系统虽然会把int=0、boolean=false和object=null,但这并不是一种良好的编程习惯。


23、无参构造器: 如果定义一类没有编写构造器,则系统会提供一个无参的构造器。所有的实例域进行默认域初始化。但是如果你提供了一个有参的构造器,则在new 一个对象时,就必须带有参数,否则是非法的。


24、显示域初始化: 这是在Java中,在类中直接对域进行赋值。比如在Employee类中,private String name = “”。这个对于多个构造器都希望把相同的值赋值给某个特定的实例域。这个在C++是不行的,必须在构造器中完成。


25、this: 在java中,为了给一个很小的构造器时,其参数可以采用域中的变量名,然后在方法体中采用this指示隐式参数,这样,即使构造器使用实例域相同的名字屏蔽了类中的实例域,但是this又可以实现访问实例域了。


26、this另一个用处: this除了可以指示隐式参数,还可以在类中的一个构造器中第一句使用如下:
public Employee(double s)
{
this("Employee #" + nextId +s);//call Employee(String, double);
nextId++;
}
表示调用同一个类的另一个构造器。这种方式可以对公共代码,只编写一次。但这在C++中不允许。


27、数据域的第三种初始化方法:初始化块( Initialization block): 除了(1)在构造器中设置值、(2)在声明中赋值之外的第3中方法。例如:

//object initialization block{    id = nextId;    nextId;}

无论采用哪个构造器new 对象,则都会首先初始化快,然后才是运行构造器的主体部分。但这中机制并不是必须的。则调用构造器的具体步骤是:(1)所有的数据域被初始化为默认值(0,false,null);(2)按照在类声明中的顺序,执行所有域值的初始化语句和初始化块;(3)如果第一个构造器第一行条用了第二个构造器,则先执行第二个构造器主体。(4)执行这个构造器的主体。



28、类设计技巧

1、保证数据私有:最重要,不能破坏封装性。

2、数据一定要初始化:不要依赖系统的默认值。

3、不要在类中使用过多的基本类型:可以使用其他类代替多相关的基本类型的使用。

4、不是所有的域都需要独立的域访问器和域更改器。就说有些域可能不希望别人获得或者设置实例域。

5、将职责过多的类进行分解。但也不能走极端。

6、类名与方法名要能体现它们的职责。命名类名的良好习惯就是采用一个名词、前面有形容词修饰的名、动名词。对于方法,习惯与访问器方法以get开头,更改器方法以set开头。

0 0