黑马程序员_java学习笔记07

来源:互联网 发布:狮王红包软件 编辑:程序博客网 时间:2024/05/17 05:07

  ------- android培训、java培训、期待与您交流! ----------

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:静态方法中不能有thissuper关键字。

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

字符串数组元素的值是什么?

Aargs中有没有元素呢?就是判断长度是否为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: 错误 找不到可以文档化的公共或受保护的类。

错误

如何解决呢?把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();

注意:开发一般用饿汉式。第二种在多线程的时候,会有安全隐患。

  面试一般考懒汉式(延迟加载)

工具类:构造私有,方法静态。直接使用类名调用,工具类一般没有访问数据,创建对象没啥意义。



  ------- android培训、java培训、期待与您交流! ----------


原创粉丝点击