封装:是一种信息隐藏技术
利用抽象数据类型将数据和基于数据的操作封装在一起;
用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的;
封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节。
继承:基于已有的类产生新类的机制
是指新的类可以获得已有类(称超类或父类)的属性和行为,称新类为已有类的子类(也称为派生类)
在继承过程中子类继承了超类的特性,包括方法和实例变量;
- 单继承:一个子类只有单一的直接超类。
- 多继承:一个子类可以有一个以上的直接超类。
数据成员声明
- public、protected、private为访问控制符。
- static指明这是一个静态成员变量(类变量)。
- fianl指明变量的值不能被修改。
- transient指明变量是不需要序列化的。
- volatile指明变量是一个共享变量。
实例变量
- 没有static修饰的变量(数据成员)成为实例变量
- 存储所有实例都需要的属性,不同的实例的属性值可能不相同
类变量(静态变量)
- 用static修饰
- 在整个类中只有一个值
- 类初始化的同时被赋值
- 适用的情况
- 类中所有对象都相同的属性。
- 经常需要共享的数据
- 系统中用到的一些常量值
方法声明
- public、protected、private控制访问权限。
- static 指明这是一个类方法(静态方法)
- final指明这是一个终结方法
- abstract指明这是一个抽象方法
- native用来集成java代码和其它语言的代码
- syschronized用来控制多个并发线程对共享数据的访问
实例方法
- 表示特定对象的行为
- 声明时前面不加static修饰符
- 参数传递:
- 值传递:参数类型为基本数据类型时
- 引用传递:参数类型为对象类型或者数组时
类方法:
- 也称为静态方法,声明时前面需要加static修饰。
- 不能被声明为抽象的
- 可以类名直接调用,也可以类名实例调用。
可变长参数
-
可变成参数使用省略号表示,其实质是数组。
例如,“String …s” 表示“String[]s” -
对于具有可变长参数的方法,传递可变参数的实际参数可以是以0个到多个对象
可变参数的实际上是利用数组实现的,具体可以参考下边的例子
public class Varargs {
public void varagsMethod(List<String>... values) {
Object[] array = values;
List<Integer> list = (List<Integer>) array[0];
list.add(1);
}
public void useVaragsMethod() {
List<String> list = new ArrayList<String>();
list.add("Hello");
// Type safety: A generic array of List<String> is created for a varargs
// parameter
varagsMethod(list);
String str = list.get(1);
}
public static void main(String[] args) {
System.out.println("Varargs");
}
}
反编译之后
public class Varargs
{
public Varargs()
{
}
public transient void varagsMethod(List values[])
{
Object array[] = values;
List list = (List)array[0];
list.add(Integer.valueOf(1));
}
public void useVaragsMethod()
{
List list = new ArrayList();
list.add("Hello");
varagsMethod(new List[] {
list
});
String str = (String)list.get(1);
}
public static void main(String args[])
{
System.out.println("Varargs");
}
}
包与目录
- 包名就是文件夹名,即目录名;
- 目录名并不一定是包名。
- Java自动引入Java.lang包
类成员的访问权限
- public公有:可以被其它任何方法访问,前提是对类成员所属的类有访问权限。
- protected 只能被同一类及其子类的方法访问
- private 只可被同一类的方法访问
- default 默认 仅允许同一个包内的访问,又被称为包访问权限
this 关键字
- 如果方法内的局部变量(包括形参)名与实例变量名相同,则方法体内部访问实
例变量时需要this关键字
对象的自动回收
- 无用对象
- 离开iale作用域的对象
- 无引用指向对象
- Java运行时系统通过垃圾收集器周期性的释放无用对象所使用的内存
- Java运行时系统会在对象进行自动垃圾回收前,自动调用对象的finalize()方法
垃圾回收器 - 自动扫描对象的动态内存区,对不再使用的对象做上标记以进行垃圾回收
作为一个后台线程运行,通常在系统空闲时异步地执行
finalize()方法
-
在类java.lang.Object中声明,因此Java中的每一个类都有该方法:
protectetd voud finalize() throw throwable
用于释放资源 -
类可以覆盖(重写)finalize()方法。
finalize()方法有可能在任何时候以任何次序执行
覆盖toSting()方法
- toString()方法 将对象内容转化为字符串对象
下面的两行代码等价
System.out.prientln(anAccount);
System.out.println(anAccount.toString());
如果需要特殊的转化功能,则需要自己覆盖toString()方法:
- 必须被声明为public;
- 返回类型为String;
- 方法的名称必须为toString,且没有参数
- 在方法体中不要使用输出方法System.out.prientln();
DecimalFormat类
DecimalFormat类在Java.text包中。
在toString()方法中使用DecimalFormat类的实例方法format对数据进行格式化。