最常用的三大设计模式:
工厂模式
单例模式
代理模式
最常用的三大设计模式:
工厂模式
单例模式
代理模式
对象的产生分析
引用类型指的是内存空间的操作。
现在的内存分为两块内存空间:
堆内存空间:保存真正的数据,堆内存保存的是对象的属性信息;
栈内存空间:保存的堆内存的地址,堆内存操作权,保存的是对象名称;
一个栈内存中只能够保存一个堆内存地址。
对象的产生实际上会有两种格式:
声明实例格式
分布式格式
对象(所有的引用数据类型)必须在其开辟空间之后才可以使用。如果使用了未开辟内存空间的引用数据类型,则将出现NullPointerException
只声明对象,并没有为其开辟堆内存空间,而 程序在编译的时候不会产生任何的语法错误,但是在检测的时候会出现如下错误提示:Exception in thread "main"java. lang.NullPointerException at TestDemo.main(TestDemo.java:12)-数字代表代码行数
只有引用数据类型(数组、类、接口)才会产生此类异常,以后出现了可以根据错误的位置观察该对象是否实例化。
代理模式:
一个接口,两个实现,其中一个实现是真实业务,另一个实现是辅助业务。
所有动作都由辅助代理,真实动作由真实业务发出。
然后利用代理工厂进行。
接口之间也可以继承!
一个类只能extends一个父类,但可以implements多个接口。
java通过使用接口的概念来取代C++中多继承。
与此同时,一个接口则可以同时extends多个接口,却不能implements任何接口。因而,Java中的接口是支持多继承的。
引用自:-----http://www.cnblogs.com/littlepanpc/p/3616300.html
public class TestDouble {
public static void main(String[] args) {
Double x=1.1;
Double y=1.1;
System.out.println(x==y);//不仅比较对象地址,也比较对象值
System.out.println(x.equals(y));//只比较对象值
}
}
单例设计模式
构造函数私有化
外部无法产生实例化对象,只能通过static关键字获得。
饿汉式----》推荐----线程安全。
懒汉式
单例模式和多例模式很相似:
构造函数私有化
类内部一定会提供一个static方法来获得实例化对象
多例模式被枚举取代。
数组基本概念
数组在开发之中一定会使用,但是像以下讲解的时候这么用的数组少了.在以后的实际开发之中,你们会更多的使用数组概念,而直接使用数组99%的情况下都只是做一个数组的for循环输出.
如果说现在要求你定义100个整型变量,那么按照之前的一个做法,可能现在定义的结构如下:
int i1,i2,i3....i100;
但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你需要编写System.out.println()语句100次。
所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于我们的引用数据类型,那么既然是引用数据类型,这里面实际上又会牵扯到内存分配,而数组的定义有如下两类。
1. 数组的动态初始化:
数据类型 [] 数组名称 = new 数据类型 [长度];
数据类型 数组名称 [] = new 数据类型 [长度];
//声明数组:
数据类型 [] 数组名称 = null; //或者下面
数据类型 数组名称 [] = null;
//开辟数组空间
数组名称 = new 数据类型 [长度];
那么当数组开辟空间之后,就可以采用如下的方式进行操作:
范例:定义一个int数组
//开辟一个数组
public class Class15{
public static void main(String args[]) {
int data [] = new int [3];//开辟了一个数组长度为3的数组空间
data[0] = 10;//第一个元素赋值
data[1] = 11;//第二个元素赋值
data[2] = 12;//第三个元素赋值
//data.length 可以获取到该数组的长度
for(int i = 0;i < data.length;i++) {
System.out.println(data[i]);
}
}
}
数组本身除了声明并开辟空间之外还有另外一种开辟模式.
范例:采用分布模式开辟数组空间
//分布式开辟一个数组
public class Class16{
public static void main(String args[]) {
int data [] = null;//声明
data = new int [3];//开辟了一个数组长度为3的数组空间
data[0] = 10;//第一个元素赋值
data[1] = 11;//第二个元素赋值
data[2] = 12;//第三个元素赋值
//data.length 可以获取到该数组的长度
for(int i = 0;i < data.length;i++) {
System.out.println(data[i]);
}
}
}
但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟空间(实例化),如果使用了没有开辟空间的数组,则一定会出现NullPointException异常信息:
public class Class16{
public static void main(String args[]) {
int data [] = null;//声明
System.out.println(data.length);
}
}
这一原则和之前讲解的对象操作是完全相同的.
1.用static修饰的内部类等同与外部类,其实例化的语法为:
外部类.内部类 内部类对象 = new 外部类.内部类().