[javaSE笔记2] JAVA的类与对象
同样还是采用记录点的方式做一些简单的笔记
-
UML ( Unified Modeling Language , 统一建模语言) : 绘制类图, 表述类间关系
-
所有java对象都存储在堆中
-
Date deadline定义了一个对象变量deadline, 它可以引用Date类型的对象. 但是变量deadline本身不是一个对象, 可以初始化这个变量让他引用一个新构造的对象deadline = new Date() 或者引用一个已有的对象deadline = birthday
-
实例字段最好用private修饰, 如果用public修饰, 任何类的任何方法都可以修改这个字段
-
不能对一个已经存在的对象调用构造器来达到重新设置实例字段的目的
-
不要编写返回可变对象引用的访问器方法, 如果需要返回一个可变对象的引用, 首先应该对它进行clone
-
方法可以访问所属类的任何对象的私有特性
-
final实例字段必须在构造对象时初始化
-
static字段 : 属于类, 不属于任何一个单个的对象
-
静态方法 : 静态方法是不在对象上执行的方法, 比如Math类的pow方法, 建议使用类名而不是对象名来调用静态方法
-
java的参数传递机制是按值调用, 方法不能修改传递给它的任何基本数据类型参数变量的内容, 但是可以改变对象参数的状态
-
重载( overloading ) : 多个方法有相同的名字和不同的参数, 便出现了重载
Java允许重载任何方法, 而不只是构造器方法
-
如果类中没有编写构造器, 就会为你提供一个无参数的构造器. 如果类中至少有一个构造器, 那么构造对象时如果不提供参数就是不合法的
-
构造器必须与类同名, 且不能有返回值( void 也不可 ), 普通方法也可以和类名相同但是必须要有返回值或者void, 构造函数可以重载
-
构造器的两种写法举例
- 参数前加前缀
public constructorTest(String aname, int ayear) {
this.name = aname;
this.year = ayear;
}
- 利用关键词this ( this指示隐式参数, 也就是所构造的对象
public constructorTest(String name, int year) {
this.name = name;
this.year = year;
}
- 初始化块---一般放在字段定义以后, 一个类的对象被构造时, 这些块就会执行
比如
class xx{
private static int nextId;
private int id;
private String name;
{
//初始化块
id = nextId;
nextId ++;
}
}
-
可以用静态的初始化块来初始化静态字段
e.g.
static
{
var generator = new Random();
nextId = generator.nextInt(1000);
}
-
包 : Java允许使用包将类组织在一个集合中, 借助包可以方便地组织自己的代码, 并将自己的代码与别人提供的代码库分开管理
-
使用包名的主要原因是确保类名的唯一性, 不同包中相同的类名不会产生冲突
-
用因特网域名以逆序的方式作为包名
-
要将类放入包中, 就必须将包的名字放在源文件的开头, 即放在定义这个包的各个类的代码之前
e.g.
package com.horseman.corejava
public class Employee
{
...
}
-
如果没有在源文件中放置package语句, 那么这个源文件的类就属于无名包 ,
-
标记public的部分可以由任意类使用; 标记为private的部分只能由定义它们的类使用; 如果没有标记public或者private, 则这个部分可以被同一个包中的所有方法访问
-
JAR文件 : Java归档文件, 可以包含类文件, 也可以包含其他类型的文件, JAR文件是压缩的, 它使用ZIP压缩格式.
-
Javadoc : Javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档, 比如JDK API. 可以参考这里
-
文档注释 :
-
类注释 : 放在import 语句之后, 类定义之前
/** *注释 * */ public class xx { ... }
-
方法注释
-
字段注释
-
通用注释
-
包注释
具体不再赘述
-
-
类设计技巧 :
- 一定要保证数据私有 ( 不破坏封装性 )
- 一定要对数据进行初始化
- 不要再类中用过多的基本类型
- 不是所有的字段都需要单独的字段访问器和字段修改器
- 分解有过多职责的类
- 类名和方法名要能够体现它们的职责
- 优先使用不可变的类