22天学习java基础笔记之day07
不积跬步,无以至千里;不积小流,无以成江海。
---荀子
Day07 代码块 static 主方法 帮助文档 单例
一、代码块
1.定义
它是由一对{}括起来的代码。
2、分类及详述
A:局部代码块:用在局部,可以及时释放内存,提到效率。
B:构造代码块:每个构造方法运行时都会自动调用构造代码块。可以对所有对象初始化。
C:静态代码块:随着类的加载而执行,而且只执行一次,优先与主方法。
假如我们有一个Person对象。请问Person p = new Person();在内存中到底做了什么呢?
步骤
A:把Preson.class文件加载进内存。
B:在栈内存空间开辟一个小空间,存储p变量。
C:在堆内存中开辟空间。创建对象。
D:对对象中的成员变量进行默认初始化。
E:执行构造代码块,如果没有构造代码块,就不执行。
F:对对象中的成员变量进行赋值。
G:把对象构造初始化完毕。
H:将对象在堆内存的首地址赋给栈内存变量p。
二、static
1.概念
静态的意思,用于修饰成员。
2.特点
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
3.注意事项
A:静态成员只能访问静态成员。
B:静态方法中不能有this,super关键字。
C:主函数是静态的 单讲。
4.静态变量(static修饰的成员变量)和非静态变量的区别
A:静态变量随着类的加载而加载,随着类的消失而消失。生命周期最长。
非静态变量随着对象的创建而存在,随着对象的消失而消失。
B:静态变量和类相关,是所属于类的,可以直接被类名调用,也可以被对象名调用。也称为类变量。
非静态变量和对象相关,是所属于对象的,只能被对象名调用。称为实例(对象)变量。
C:静态变量存储于方法区中的静态区。
非静态变量存储于对象的区域,在堆内存中。
D:静态变量的数据被所有的对象共享。
非静态变量是每个对象特有的数据。
5.内存图
看懂内存图即可。
6.什么时候用
分析问题时:
当这个内容是所有对象所共享的时候,我们就把它定义为static修饰的。
当这个内容是每个对象所特有的时候,就把它定义为非static修饰的。
写代码的时候,你可以考虑:
某个成员方法访问了对象所共享的内容。或者说,访问了静态成员。那么,该方法
就必须定义为static修饰的。访问了特有的属性,就不能被静态修饰。
简单说:如果函数中访问了成员变量,不能静态,否则可以静态化,直接被类名调用即可。
三、主方法
public static void main(String[] args){ }
(1):public 公共的权限修饰符。
(2):static 静态的。
(3):void 返回类型是空的。
(4):main jvm的入口。
(5):String[] args
字符串数组元素的值是什么?
A:args中有没有元素呢?就是判断长度是否为0。
B:长度为0,有用吗?干什么啊?没用,但是我们可以给args赋值。
C:我们还可以给args赋值
java MainDemo hello world itcast
四、制作帮助文档
1.类中的内容加入文档注释。
2.如果制作呢:
javadoc -d arrayTool -author -version ArrayTool.java
javadoc 是解析文档注释并生成说明书的工具的名字
-d arrayTool :-d后面跟的是目录
-author -version: 提取author,version。
ArrayTool.java 文件名
3.出现问题
正在创建目标目录: "arrayTool\"
正在装入源文件 ArrayTool.java...
正在构造 Javadoc 信息...
javadoc: 错误 - 找不到可以文档化的公共或受保护的类。
1 错误
如何解决呢?把class前面加个权限修饰符public
五、单例设计模式
1、设计模式
是一种编程思想,解决问题的一种行之有效的思想。java中有23种设计模式。Gof设计模式。
2、单例设计模式
----源于建筑行业
A:保证对象在内存中只有一个。
B:如何保证?
**不能让其他类来创建对象。
**本类中要创建一个本类对象。
**对外提供公共的访问。
C:步骤 我们的类是Student
**private Student(){}
**Student s = new Student();
**public Student getInstance(){return s;}
什么时候使用呢?配置文件
3、单例的两种方式
第一种方式:饿汉式
class Teacher{
//本类创建一个对象
private static Teacher t = new Teacher();
//为了保证其他类不能够创建对象
private Teacher(){}
//为了外界能够通过类名直接调用
public static Teacher getInstance(){
return t;
}
}
Teacher t1 = Teacher.getInstance();
Teacher t2 = Teacher.getInstance();
第二种方式:懒汉式
class Teacher{
//本类创建一个对象
private static Teacher t = null;
//为了保证其他类不能够创建对象
private Teacher(){}
//为了外界能够通过类名直接调用
public static Teacher getInstance(){
if(t==null){
Synchronized(Teacher.class){
if(t==null){
t = new Teacher();
}
}
}
return t;
}
}
Teacher t1 = Teacher.getInstance();
Teacher t2 = Teacher.getInstance();
注意:开发一般用饿汉式。第二种在多线程的时候,会有安全隐患。
面试一般考懒汉式(延迟加载)
工具类:构造私有,方法静态。直接使用类名调用,工具类一般没有访问数据,创建对象没啥意义。