包的使用、访问权限
方法重载
静态成员
this关键字
补充
在数字后面加上f表示该数字是float型的,如果不写的默认的是double型。同理,加上l表示long型,如果不写默认int型。
1、包
Java使用包(package) 对类进行组织和管理。
1.1、包的作用
- 查找定位类
- 避免命名冲突
- 便于发布软件
- 保护类
1.2、包的命名习惯
- 包是有层次关系的, 一个包中还可以有包, 称为子包。
- 包名需要时唯一的, Java建议采用Internet域名的倒序作为包的前缀。
- Java中,包名与文件系统的目录结构一一对应。
- 把类添加到指定包中, 只需在源程序的最前端加上
package 包名;
2、访问权限
详细见我的文章——Java修饰符
https://www.jianshu.com/p/d1715b417ea5
2.1、数据域封装
- 作用:把对数据域的直接访问变成间接访问
- 实现:
步骤一、使用private修饰数据域
private String name;
步骤二、为每个数据域创建访问器方法和修改器方法
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
2.2、修饰方法
- 只在本类内部使用的方法使用private。
- 提供给其他类使用的方法使用public 或其他访问权限。
- 默认构造方法的访问权限与类的访问权限相同。
3、this关键字
- 在类的构造方法中使用, 调用本类的其他构造方法。
// 如果使用该语句, 必须在构造方法的第一句
this(实参表)
- 在类的构造方法和实例方法中使用,代表对当前对象的引用。
// 每个构造方法和实例方法中都隐含有一个this引用
this.实例变量名
this.实例方法名(实参表)
4、实例成员与静态成员
static修饰是静态成员
静态成员变量,静态方法未用static修饰是实例成员
实例成员变量,实例方法静态成员变量
静态变量在类加载到内存时分配内存空间,所有对象共享静态变量。
类名.静态变量名
- 实例成员变量
实例变量只有其对象创建后才会分配内存空间,不同对象的实例变量互不影响。
对象名.实例变量名
- 静态方法
类加载到内存时,为静态方法分配内存空间。
类名.静态方法()
- 实例方法
①当创建类的对象时,实例方法才会分配入口地址。
②多个对象的同一实例方法的入口地址是共享的。
对象名.实例方法()
public class StaticDemo {
// 实例数据域
int instanceData;
// 静态数据域
static int staticData;
// 实例方法
int instanceMethod() {
return instanceData;
}
// 静态方法
static int staticMethod() {
return staticData;
}
}
5、静态初始化器与实例初始化器
初始化器是直接在类中定义的用一对{}括起来的语句组。
- 静态初始化器使用static关键字修饰,用来初始化静态变量。
- 实例初始化器没有修饰关键字,用来初始化实例变量。
- 静态初始化器的执行:类首次加载到内存时,首先是静态数据域变量的变量初始化;然后按排列顺序执行类中staic初始化器。
- 在构造方法第一条语句执行之前,按排列顺序执行类中的实例初始化器,然后执行构造方法中的剩余语句。
6、方法重载
- 静态多态:基于重载(overload)实现
- 方法名称相同,形参列表不同
7、对象的应用
- Java的变量分为基本类型变量和引用类型变量。
- 基本类型变量存放在栈内存中。
- 引用类型变量在栈内存中存放其引用对象的地址。其“真身”在堆内存中。
7.1、对象的赋值与复制
赋值:两个引用变量之间进行赋值,赋值的是地址,使2个引用变量引用同一对象。
Circle c1 = new Circle();
Circle c2 = c1; // 使c2和c1引用同一对象
复制:使用自定义类的clone方法。
7.2、对象的比较
- 使用 “==”
比较的是地址
Circle c1, c2;
c1 == c2 // 两个引用指向同一对象结果为true,否则为false
- 调用API。
①String对象的equals方法是比较字符串的内容是否相同。Arrays对象的equals方法是比较数组的元素是否相同。
②除String对象外,Arrays对象外,其它对象的equals方法依然是比较地址是否相同
Arrays.equals(array1, array2); // 比较2个数组
Arrays.deepEquals(array1, array2); // 深度比较2个数组
String s1, s2;
s1.equals(s2); //比较2个字符串
7.3、引用变量作为方法的返回值
// 方法定义
public Circle createACirlce(double radius) {
Circle temp = new Circle();
return temp; //返回对象的地址
}
// 方法调用
Circle c = createACircle(10.0); // c得到返回的对象地址
7.4、对象的组合
- 一个类的成员变量可以是Java允许的任何类型,当然也包括其它类的对象类型。
- 例如类A使用类B的对象作为成员变量,则A的对象把B的对象作为组成部分。称为:A has-a B。