zoukankan      html  css  js  c++  java
  • 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();

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

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

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

  • 相关阅读:
    区块链
    黑帽内容整理
    编程语言
    编程语言
    PHP
    安全体系建设-OWASP
    burp
    编程语言-Python-GUI
    加解密
    结合自己的程序对thinkphp模板常量的理解
  • 原文地址:https://www.cnblogs.com/aohongzhu/p/12938757.html
Copyright © 2011-2022 走看看