视频教程参考:毕向东Java基础视频
构造函数的特性:
<1>.函数名和类名相同。
<2>.这个函数没有返回值,所以函数没有返回类型。
<3>.该函数中不能有return语句。
<4>.该函数的作用:是在创建对象时,对对象的初始化。
<5>.一个类中可以定义多个构造函数,根据不同的对象,调用不同的构造函数。多个构造函数的名字都和类名相同,构造函数的参数不同。
构造代码段的特性:
<1>.构造代码段被所有构造函数所共有。
<2>.再创建对象时,系统会先调用构造代码段,然后在执行相对应的构造函数,有一个执行顺序的问题。
<3>.构造代码块是对不同对象的共性进行的初始化。
关键字:this代表this所在函数的所属对象的引用。也就是说,哪个对象调用this所在的函数,this就代表哪个对象。
this的应用:
<1>.在本类中,调用本类的属性或者功能时,用this代表本类的对象。
<2>.构造函数中之间的相互调用只能用this语句。
<3>.this语句只能放到构造函数的第一行。因为初始化动作先执行。
static关键字:
用法:static用来修饰类中的成员变量或者是成员函数,用static修饰后该成员变成静态的,在存储区中的存储方式发生了变化。
经过static修饰后的成员多了一种调用方法,可以被类直接调用:类名.成员。
特性:
<1>.随着类的加载而加载,随着类的消失而消失。
<2>.优先于对象存在。
<3>.被所有对象所共享。
<4>.可以直接被类名调用。
注意事项:
<1>.静态方法只能调用静态成员(包括静态变量,静态方法);静态不能访问非静态。
<2>.静态方法中不可以定义this,super关键字。
利弊:
利:可以节省内存空间,对对象共享的成员,设定为静态。
可以被类名直接访问。
弊:生命周期过长
访问出现局限性,静态的只能访问静态的。
什么时候使用静态?
什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时(即属性的值),注意不是属性,该数据被静态所修饰。
对象中的特有数据要定义成非静态在堆内存中。
什么时候定义静态函数呢?
当功能内部没有访问到非静态的数据(对象的特有数据),那么该功能可以被定义成非静态的。
静态代码块:是给类初始化的。
格式:
static {
静态代码块语句
}
特点:随着类的加载而加载,只执行一次,优先于对象初始化(构造代码块),优先于函数调用。
对象的建立过程。
Persion p = new Persion(); 都做了什么?
<1>.因为new用到了Persion.class,需要在文件中查找Persion.class,并加载到内存中。
<2>.如果有静态代码块的话,对类进行初始化。
<3>.在堆内存中开辟地址空间,分配内存地址。
<4>.在分配的地址空间中,建立对象的特有属性,并进行默认初始化。
<5>.对对象特有属性就行显示初始化。
<6>.如果类中有构造代码块的话,对对象进行构造代码块初始化。
<7>.对对象进行构造函数初始化。
<8>.将堆内存中的地址赋值给栈内存中的p变量。
单例设计模式:
解决的问题:解决一个类在内存中只有一个对象。
想要保证对象的唯一性
<1>.将构造函数私有化。
<2>.在类中创建一个本类对象。
<3>.提供一个方法可以获取到该对象。
代码编写有两种格式:饿汉式和懒汉式
<1>.饿汉式的写法
特点:Single一进内存就已经初始化了对象。开发时常用格式。
class Single
{
private Single(){};
private static Single s = new Single();
public static Single getInstance()
{
return s;
}
}
<2>.懒汉式的写法
特点:对象是在方法被调用后才初始化,也叫做对象的延时加载。
Single类进内存的时候,对象还没有存在,只有调用了getInstance方法后,才建立对象。
class Single
{
private Single(){}
private static Single s = null;
public static Single getInstance()
{
if(s == null)
s = new Single();
return s;
}
}
在实际的运用中,如果需要保证一个类只产生一个对象,就把以上三行加上即可,其他对对象描述不变。
阅读(1836) | 评论(2) | 转发(2) |