Java中的Abstract Class(抽象类)
1. Abstract Class随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般、更通用。
类的设计应该保证父类和子类能够共享特征。
有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫抽象类。
用 abstract 关键字来修饰一个类时,这类叫抽象类;
用 abstract 来修饰一个方法时,该方法叫抽象方法;
抽象方法:只有方法的声明,没有方法的实现,以分号结束。
1public abstract int abstractMethod(int a);
含有抽象方法的类必须被声明为抽象类;
抽象类不能被实例化。抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,则该子类仍为抽象类;
不能用 abstract 修饰属性、私有方法、构造器、静态方法和 final 的方法。
抽象类可以有构造方法,只是不能被实例化。
2. 模板方法模式抽象类体现的就是一种模板模式的设计。
抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
当功能内部一部分实现是确定的 ...
Java中的final关键字
在 Java 中声明类、属性和方法时,可使用关键字 final 来修饰,表示“最终”。
final 标记的类不能被继承
如String类、Syetem类、StringBuffer类。
1public final class TestPerson() { ... }
final 标记的方法不能被重写
如Object类中的 getClass()。
123public class TestPerson() { public final void test() { ... }}
final 标记的变量(成员/局部变量)即为常量。名称大写,且只能被赋值一次。
final 标记的成员变量必须在声明的同时,或在每个构造方法,或代码块中显式的赋值,然后才能使用。final double PI= 3.14;
1234public class TestPerson() { final String NAME_1 = "acb"; // final 修饰的常量必须显式赋值 final ...
Java中的static关键字
类属性(静态变量)作为该类各个对象之间共享的变量。
在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性,相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常声明为类方法(静态方法),由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
在 Java 类中,可用 static 修饰属性、方法、代码块、内部类。被修饰后的成员具有以下特点:
随着类的加载而加载;
优先于对象存在;
修饰的成员,被所有对象共享;
访问权限允许时,可不创建对象,直接被类调用。
没有对象的实例时,可以用.类名.属性名 和 类名.方法名() 访问 static 成员;
在 static 方法内部只能访问类的 static 属性,不能访问非 static 属性;
非 static 方法内部可以访问 static 和非 static 属性。
因为不需要实例就可以访问 static 方法,因此 static 方法内不能有 this 和 super;
重载的方法需要同时为 static 或非 static。
Java中的Wrapper(包装类)
Java中针对八种基本数据类型定义相应的引用类型——包装类(封装类)。
1. 基本数据类型与包装类的对应关系
基本数据类型
包装类
boolean
Boolean
btye
Byte
short
Short
int
Integer
long
Long
char
Character
float
Float
double
Double
2. 装箱有了类的特点,就可以调用类中的方法。基本数据类型包装成包装类的实例 —— 装箱
12345// 通过包装类的构造器实现int a = 5;Integer t = new Integer(a);// 通过字符串参数构造包装类对象,要求字符串所含内容为对应类型的值Float f = new Float("4.56");
3. 拆箱获得包装类对象中包装的基本类型变量 —— 拆箱
12// 调用包装类的 .xxxValue() 方法boolean b = bObj.booleanValue();
JDK1.5 以后,支持自动装箱、拆箱,但类型必须匹配。
12int a2 = t; // ...
Java中的Object类
Object 类是所有 Java 类的根父类;
如果在类的声明中未使用 extends 关键字指明其父类,则默认父类为 Object 类。
123// 下面两个类等价public class Person { ... }public class Person extends Object { ... }
1public void method(Object obj) { ... } // 可以接收任何类作为参数
Object 类中的主要方法
NO.
方法名称
类型
描述
1
public Object()
构造
构造方法
2
public boolean equals(Object obj)
普通
判断是否为同一对象
3
public int hashCode()
普通
获取 Hash 码
4
public String toString()
普通
打印”对象所属包@对象地址”。直接打印对象名,等价于打印其toString()返回结果,可以重写toString()函数打印期望的内容。
Java操作符instanceof
1x instanceof A
检验 x 是否为类 A 或 A 派生类的对象,返回值为 boolean 类型。
Java中==与equals()
1. ==操作符
基本类型比较值:只要两个变量的值相等,即为 true;
引用类型比较引用:只有指向同一个对象时,== 才返回 true。
2. equals()方法所有类都继承了 Object,也就获得了 equals() 方法,也还可以重写。
只能比较引用类型,其作用与 == 相同,比较是否指向同一个对象
格式:obj.equals(obj2)
特殊的,当用 equals() 方法进行比较时,对类 File、String、Date 及包装类(Wrapper Class)来说,是比较类型和内容而不考虑引用的是否是一个对象。原因是在这些类中重写了 Object 类的 equals() 方法。
Java中类对象的实例化过程
如图:
1. 简单类对象的实例化过程
2. 子类对象的实例化过程
3. String 对象的创建
Java中的包
包帮助管理大型软件系统,将语义近似的类组织到包中,解决命名冲突问题。
包可以包含类和子包。
1. 关键字packagepackage 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)。它的格式为:package 顶层包名.子包名,用 ‘.’ 来指明包的层次。包常用小写单词,类名首字母通常大写。
2. 关键字import关键字import用来导入其他包。
import 出现在 package 语句之后,类定义之前,可以有多个 import 语句。
import.lee.* 语句,表示导入 lee 包下所有的类,而 lee 包的子包内的类不会被导入。
import 语句不是必须,可以在类内使用其他类的全名。
3. JDK 中主要的包介绍
java.lang:包含一些 java 语言的核心类,如 String、Math、Integer、System 和 Thread,提供常用功能。
java.net:包含执行与网络相关的操作的类和接口。
java.io:包含能提供多种输入/输出功能的类。
java.util:包含一些实用工具类,如定义系统 ...
Java中的单例设计模式
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
单例设计模式就是采取一定的方法保证在整个的软件系统中,对某个类智能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类构造方法的访问权限设置为 private,这样,就不能用 new 操作符在类的外部产生类的对象了,只能调用该类的某个静态方法以返回内部创建的对象,静态方法只能访问类中的静态成员变量,所以指向类内部产生的该类对象的变量也必须定义成静态的。
单例设计模式 的实现方式主要有饿汉式和懒汉式。
饿汉式
12345678910class Single { // private 构造器,不能在类的外部创建该类的对象 private Single() {} // 私有的,只能在类的内部访问 private static Single onlyone = new Single(); // getSingle() 为 static,不用创建对象即可访问 pub ...