前言

  • 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
2
3
new ClassName();//类中没有构造器时,由系统默认。
————————————分割线————————————
new ClassName("张三","20");//类提供了构造器,按构造器格式创建对象。
  • 构造器 重载 调用

下面这个例子很好的解释了:构造器、方法的重载、构造器的调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import static java.lang.System.*;       //-导入java.lang.System下全部的静态成员变量--减少代码书写量
public class Constructor{

//-定义4个实例变量
public String name;
public String color;
public double weight;
public int age;

public static void main(String[] args){
Constructor C=new Constructor("张三","蓝色",65.5,26);
out.println(C.name);
out.println(C.color);
out.println(C.weight);
out.println(C.age);
}

//-创建一个空的构造器
public Constructor(){

}

//-创建一个包含2个参数的构造器--构造器重载
public Constructor(String name,String color){
//-部分实例变量赋值
this.name=name;
this.color=color;
}

//-创建一个包含4个参数的构造器--构造器重载
public Constructor(String name,String color,double weight,int age){
//-构造器里面调用其它构造器,格式方法如下:
//-1、使用this调用另一个重载构造器,只能在构造器中使用;
//-2、必须写在构造器执行体的第一行语句;
this(name,color);

this.weight=weight;
this.age=age;
}
}

代码源于这里

调用构造器的具体处理步骤

  1. 所有数据域被初始化为默认值(0,false,null);
  2. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块(即包含在单独花括号内的初始化语句);
  3. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体;
  4. 执行这个构造器主体。
  • 基础扩展–内存分析

视频文案: 内含Java中栈、堆、方法区的特点。

3.源文件剖析

  1. 一个class类都会生成一个.class源文件,无论在或是不在同一个.java文件中,都会生成,并存放在bin文件夹中。
  2. 编写出来的源代码(即.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修饰符。

  1. 类注释:类注释必须放在import语句之后,类定义之前。
  2. 方法注释:放在所描述的方法前。
  3. 域注释:对公有域(常指静态常量)建立文档
  4. 通用注释。
  5. 包注释

……待研究……

7.类设计技巧

  1. 一定要保证数据私有
  2. 一定要对数据初始化
  3. 不要在类中使用过多的基本类型(即用其他的类代替多个相关的基本类型的使用)
  4. 不是所有的域都需要独立的域访问器和域更改器
  5. 将职责过多的类进行分解(例如:一个复杂的类可分解成两个更为简单的类,那就要分解)
  6. 类名和方法名要能够体现它们的职责

    命名类名的良好习惯是采用一个名词、前面有形容词修饰的名词(RushOrder)或动名词修饰的名词(BillingAddress)。对于方法来说,习惯是访问器方法用小写get开头 (getSalary),更改器方法用小写的set开头(setSalary)。

  7. 优先使用不可变的类

参考文献

《java核心技术 卷1》

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Volantis 作为主题,总访问量为

桂ICP备2021001128号