封装private:仅对外提供公共访问方式,隐藏对象的属性和实现细节。私有只在本类中有效,类以外即使建立对象也不能访问成员,但是可以通过函数来修改和访问。外部不需要用到的方法也可以Private
可以在访问中加入逻辑判断等语句,对访问的数据进行操作(填入合适的值),提高健壮性
私有是封装的一种表现形式,还有其他方法可以封装。private是最低权限
构造函数:对象一建立(如果没有建对象,而是调用方法,则构造函数不执行)就会调用构造函数,构造函数也有重载
代码块:给对象进行初始化,对象一建立就运行,并且优先于构造函数。是所有对象共性的初始化内容
this 区分成员变量和局部变量同名的情况。this代表本类的对象,this代表它所在函数所属对象的引用,也就是哪个对象调用,this就是谁
构建函数间的调用:this语句传相对于的参数this(name),this()等,相当于new Person()
注:this语句只能放在构造函数的第一行(初始化中的初始化要放在前面)
static 静态(类变量 ):用于修饰成员(成员变量和成员函数),会被提取出来。静态修饰后除了可以被对象调用,还可以被类名调用(类名.静态成员)静态成员存储在方法区(也叫共享区、数据区,类的方法也分配在这个区里),因此可以调用另一个类的静态方法
特点:1.随着类的加载而加载(随着为类(而不是对象)分配空间、静态成员也分配在内存中,也随着类的消失而消失);2.被所有对象所共享;3.优先于对象存在;4.可以直接被类名所调用;
类变量和实例变量的区别:生命周期、存放位置
static修饰方法:可以直接被类调用,只能访问静态成员,不能访问非静态成员(没有对象)。
非静态方法既可以访问静态,也可以访问非静态。
静态方法中不可以定义this,super关键字,静态优先于对象存在。所以this不能出现。
优点:节省共享数据空间,可以直接被类名调用
弊端:生命周期长,访问存在局限性(只能访问静态)
主函数:是特殊函数,可以被java虚拟机调用。public代表函数访问权限最大
static代表主函数随着类的加载而存在
void表示主函数没有返回值
main不是关键字但是是被识别的特殊单词
函数参数(String[] args)是字符串数组。主函数是固定格式的,可重载。唯一能改的地方是args。
jvm调用时传入的是new String[0].。
javac执行编译功能,java在虚拟机底层,负责调用主函数,同时可以向字符串数组传值。
什么时候定义静态函数呢?当功能内部不需要用到非静态成员的数据或者有共性功能时,就可以使用静态修饰
将所有数组功能放到一个类中,创建类的对象,实现功能。虽然可以通过建立对象使用工具方法,但是并未封装(指成员并不需要被禁止调用)和使用特有数据,所以方法都定义成static。为了禁止类建立对象,可以将空参数构造函数私有化 private 类名() {}
当另一个类不在当前classpath中时,需要set classpath=.;c:\文件夹;
java说明书(API帮助文档):
javadoc -d myhelp -author -version Tooljava
(这个类必须是public型)
构造方法如果要出现在帮助手册中,必须要是public,默认的构造函数的public修饰是随着类的变化而变化
/**
说明1
@param 参数
@return
*/
静态代码块:随着类的加载(用到类的内容时会加载)而执行,只执行一次优先于主函数和构造函数。
用于给类初始化。
格式:
{
执行语句
}
流程:
1.new对象时通过虚拟机将类加载class文件进内存
2.静态代码块被执行,给类进行初始化(只能对静态成员进行初始化)。
**方法区先于堆存在
3.堆内存开辟空间,分配内存地址
4.堆内存建立对象的特有属性,并进行默认初始化
5.显式初始化
6.对对象进行构造代码块初始化(非静态)
7.对对象进行构造函数初始化
8.将内存地址给栈内存的p变量。
非静态省略 this. 静态省略 类名.
单例设计模式:一个类在内存中只有一个对象
思想:
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。----将构造函数私有化
2.还为了其他程序可以访问该类对象,只好在本类中自定义一个对象(引用在方法区)。----new
3.方便其他程序对自定义对象的访问,可以对外提供一些访问方式。----定义个方法
代码(先初始化对象,饿汉式):
private Single(){}
private static Single s = new Single();
public static Single getInstance(){}
应用:保证事物的对象在内存中唯一,提供修改和获取该对象属性的方法。
另一种写法(对象被方法调用时才初始化,延时加载,懒汉式):
private Single(){}
private static Single s = null;
public static Single getInstance()
{
if(s == null)
s = new Single();
return s;
}
缺点:单核CPU在某一个时刻只能处理一个程序,多线程并发访问会出现安全问题。
关键字:synchronized 同步,一次只能有一个程序调用,但判断较多,程序效率降低。多线程技术解决:
双重判断:
if(s == null) ------以后进来的线程都不满足了,减少次数
synchronized(类名.class){
if(s == null) {new}
}