前言
- Java是完全面向对象的
- 面向对象的程序是由对象组成的
- 面向对象:只关注对象(或需求),不关注如何实现。
- 面向对象与面向过程的差别:
正文
1.类之间的关系
- 依赖:一个类的方法操控另一个类的对象,称为一个类依赖于另一个类。(即一个类中的对象需要访问另一个类的对象)
- 聚合:包含关系。即类A的对象包含类B的对象。
- 继承:一个类B拥有类A方法的基础上还有额外的的功能,称为类B继承类A。
2.构造对象
Java中使用构造器(constructor)构造新实例,构造器是一种特殊的方法,用来构造并初始化对象。
例如.构造一个Date对象:
1 | new Date()// 构造器名为Date(与类名相同),要构造对象,需在构造器前加 new操作符。 |
另外,可将对象存放在一个变量中,方便多次使用
1 | Date vari = new Date(); |
注: 如例,语句 “
Date vari;
“, 定义了一个可以引用Date
类型的对象变量。但变量vari
不是一个对象,实际上也没有引用对象。即vari
只是一个无对象的变量,所以它不能引用任何Date
方法。只有在后面构造一个对象或引用一个构造好的Date对象变量才能正常使用。另外,一个对象变量并没有实际包含一个对象,而仅仅是引用一个对象,即对象变量存储的是对某一个对象的引用。
- 无参构造器: 当类不提供构造器的时候,系统会默认一个构造器。但有构造器时,就必须按照构造器的格式创建对象。
1 | new ClassName();//类中没有构造器时,由系统默认。 |
- 构造器 重载 调用
下面这个例子很好的解释了:构造器、方法的重载、构造器的调用。
1 | import static java.lang.System.*; //-导入java.lang.System下全部的静态成员变量--减少代码书写量 |
代码源于这里
调用构造器的具体处理步骤
- 所有数据域被初始化为默认值(0,false,null);
- 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块(即包含在单独花括号内的初始化语句);
- 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体;
- 执行这个构造器主体。
- 基础扩展–内存分析
视频文案: 内含Java中栈、堆、方法区的特点。
3.源文件剖析
- 每一个class类都会生成一个
.class
源文件,无论在或是不在同一个.java
文件中,都会生成,并存放在bin文件夹中。 - 编写出来的源代码(即
.java
文件)都保存在src文件夹中。
回顾:
javac 命令编译.java文件,生成.class文件。
java命令执行.class文件。
4.main方法
事实上,每个类都可以有一个main方法,用于对类进行单元测试。
5.包
包:介于javac和java之间,用于方便管理源文件的一个文件夹,可以保证类名的唯一性(即即使类名相同但是包不同,类也是不相同)。常用域名的逆序来命名:原序mrgo123.com逆序为com.mrgo123,其源文件位于com/mrgo123文件下。
包(含类、方法、静态方法、静态域)的导入用
import
。例如上述《构造器 重载 调用》的代码例子。
类路径???
6.文档注释
JDK中javadoc实用程序,能够由源文件生成HTML文件。
注释格式:/** ………… */。
注释应放置在所描述特性的前面,每个文档注释在标记后紧跟着自由格式文本,标记由@开始,如@author。javadoc实用程序自动地将这些句子抽出来形成概要页。
在自由格式文本中,可以使用HTML修饰符。
- 类注释:类注释必须放在import语句之后,类定义之前。
- 方法注释:放在所描述的方法前。
- 域注释:对公有域(常指静态常量)建立文档
- 通用注释。
- 包注释
……待研究……
7.类设计技巧
- 一定要保证数据私有
- 一定要对数据初始化
- 不要在类中使用过多的基本类型(即用其他的类代替多个相关的基本类型的使用)
- 不是所有的域都需要独立的域访问器和域更改器
- 将职责过多的类进行分解(例如:一个复杂的类可分解成两个更为简单的类,那就要分解)
- 类名和方法名要能够体现它们的职责
命名类名的良好习惯是采用一个名词、前面有形容词修饰的名词(RushOrder)或动名词修饰的名词(BillingAddress)。对于方法来说,习惯是访问器方法用小写get开头 (getSalary),更改器方法用小写的set开头(setSalary)。
- 优先使用不可变的类
参考文献
《java核心技术 卷1》