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();

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

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

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

原文地址:https://www.cnblogs.com/aohongzhu/p/12938757.html