Java中的工厂方法(FactoryMethod)
FactoryMethod 模式是设计模式中应用最为广泛的模式。
在面向对象编程中,对象的创建工作非常简单,但对象创建的时机却很重要。
FactoryMethod 解决的就是这个问题。
FactoryMethod 通过面向对象的手法,将所要创建具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。
工厂方法举例
开发人员1:橙色框;
开发人员2:紫色框。
理解:开发人1 提供一个固定的制造汽车的接口,此接口永远不变。需要更改内容的的时候,只修改内容、与内容和接口之间的衔接,不对开发人员2的代码造成任何影响。
Java中main()方法参数
Java中的main()方法
1234public class HelloWorld { public static void main(String[] args) { }}
在命令行下执行 Java 的 Class 时,此参数接收一个参数列表,形式为
1$ java ClassName arg1 arg2 arg3 ...
Java中的Inner Class(内部类)
1. 什么是内部类
在 Java 中,允许一个类的定义位于另一个类内部,前者称为内部类,后者称为外部类。
内部类的作用:主要解决 Java 不能多重继承的问题。
Inner Class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。
Inner Class 的名字不能与包含它的类相同。
Inner Class 可以使用外部类的私有数据,因为他是外部类的成员,同一个类的成员之间可以相互访问。而外部类要访问内部类的成员需要 内部类.成员 或 内部类对象.成员。
2. 内部类的分类
成员内部类(static 成员内部类和非 static 成员内部类)
局部内部类(不谈修饰符)
匿名内部类
3. Inner Class 作为类的成员
可以声明为 final;
和外部类不同,可以声明为 private 和 protected;
Inner Class 可以声明为 static 的,但此时就不能再使用外层类的非 static 成员变量。
4. Inner Class 作为类可以声明为 abstract 类,因此可以被其他内部类继承。
非 static 的内部类中的成员不 ...
Java中的初始化块
1. 初始化块(代码块)的作用对 Java 对象进行初始化。
2. 程序的执行顺序
声明成员变量的默认值;
显式初始化,多个初始化块被一次执行(先static代码块后普通代码块,同级别下按先后顺序执行)。
构造器再对成员进行赋值操作。
3. 非静态代码块和静态代码块3.1. 非静态代码块 非静态代码块没有 static 修饰。
123{ // statements}
可以有输出语句;
可以对类的静态和非静态属性声明进行初始化操作;
可以调用静态和非静态的属性或方法;
若有多个非静态的代码块,按照从上到下的顺序依次执行;
每次创建对象,都会执行一次;
先于构造器执行。
3.2. 静态代码块静态代码块有 static 修饰。
123static { // statements}
可以有输出语句;
可以对类的静态属性声明进行初始化操作;
可以调用静态的属性或方法;
多有多个静态代码块,按照从上到下的顺序依次执行;
静态代码块只执行一次;
先于非静态代码块执行。
static 代码块多用于对 static 属性进行初始化。
4. ...
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 类型。