zoukankan      html  css  js  c++  java
  • Java编程思想学习笔记——2、一切都是对象

    用句柄操作一个对象

    句柄:引用或者指针,相当于遥控器(句柄)控制电视机(对象

    例如,String s;这只是声明一个句柄,并没有连接一个对象,一种更安全的做法是:创建一个句柄时,记住无
    论如何都进行初始化

    所有对象都必须创建

    String s = new String("asdf");

    Java对象保存到什么地方

    计算机有六个地方可以存储数据(2、3、4在ram中)

    (1)寄存器:是由编译器控制,我们不能控制

    (2)堆栈:存储数据需要知道数据的数量及lifetime,灵活性差,有些java数据保存在其中,例如句柄、基本类型(int、String、boolean等)

    (3)堆(heap):java对象存储的地方,用new命令来创建,在内存堆中创建对象会花更多的分配时间

    (4)静态存储:可用static 关键字指出一个对象的特定元素是静态的。但 Java 对象本身永远都不会置入静态存储空间。

    (5)常数存储:常数一般存储在代码内部,是安全的,有的存在ROM里

    (6)非RAM存储:独立于程序外,程序结束了数据还在,有“流式对象”和“固定对象”

    Java的数组

    具有比C/C++更高的安全性,由于系统自动检测范围,会消耗少量的内存开销,且让java数组不可在系统不允许的范围内创建

    创建对象数组时,实际创建的是一个句柄数组。而且每个句柄都会自动初始化成一个特殊值,并带有自己的
    关键字:null(空)。一旦Java 看到null,就知道该句柄并未指向一个对象。正式使用前,必须为每个句
    柄都分配一个对象,若试图使用依然为null 的一个句柄,就会在运行期报告问题

    作用域是由花括号的位置决定的,作为在作用域里定义的一个变量,它只有在那个作用域结束之前才可使用

    但在 Java 里不能象下面这样书写代码:   
     
    {
      int x = 12;
      {
        int x = 96; /* illegal */
      }
    }
     
    编译器会认为变量x 已被定义。

    字段和方法

    一个对象包含数据成员(有时也叫“字段”)以及成员函数(通常叫“方法”)

    如何引用一个对象的成员:“对象句柄.成员”

    1. 主成员的默认值
    若某个主数据类型属于一个类成员,那么即使不明确(显式)进行初始化,也可以保证它们获得一个默认
    值。
     
    主类型 默认值
     
    Boolean false
    Char '\u0000'(null)
    byte (byte)0
    short (short)0
    int 0
    long 0L
    float 0.0f
    double 0.0d

    并不适用于“局部”变量——那些变量并非一个类的字段。所以,假若在一个函数定义中
    写入下述代码:
    int x;
    那么x 会得到一些随机值(这与C 和C++是一样的),不会自动初始化成零。

    方法、自变量和返回值

    方法

    返回类型 方法名( /* 自变量列表*/ ) {/* 方法主体 */}

    “静态”方法可针对类调用,毋需一个对象:有static声明的方法

    名字的可见性:

    Java 的设计者鼓励程序员反转使用自己的Internet 域名,因为它们肯定是独一无二的

    如何使用类

    要用import 关键字准确告诉Java 编译器我们希望的类是什么。import的作用是指示编译器导入一个“包”——或者说一个“类库”(在其他语言里,可将“库”想象成一系列函数、数据以及类的集合。但请记住,Java 的所有代码都必须写入一个类中)。

    用static关键字的两种情形

    (1)只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象

    (2)即使没有创建对象,也需要一个能调用的方法

    下述代码能生成一个static数据成员,并对其初始化:
     
    class StaticTest {
    Static int i = 47;
    }
     
    现在,尽管我们制作了两个StaticTest 对象,但它们仍然只占据StaticTest.i的一个存储空间。这两个对
    象都共享同样的i。请考察下述代码:
    StaticTest st1 = new StaticTest();
    StaticTest st2 = new StaticTest();
    此时,无论 st1.i还是st2.i都有同样的值47,因为它们引用的是同样的内存区域。

    StaticTest.i++;
    其中,++运算符会使变量增值。此时,无论 st1.i 还是st2.i 的值都是48。

    在某些编程环境里,程序会在屏幕上一切而过,甚至没机会看到结果。可将下面这段代码置于main()的末尾,用它暂停输出:
    try {
    Thread.currentThread().sleep(5 * 1000);
    } catch(InterruptedException e) {}
    }
    它的作用是暂停输出5 秒钟。这段代码涉及的一些概念要到本书后面才会讲到。

    第一个java程序:


    // Property.java
    import java.util.*;
     
    public class Property {
      public static void main(String[] args) {
        System.out.println(new Date());
        Properties p = System.getProperties();

        p.list(System.out); //将属性列表输出到指定的输出流。
        System.out.println("--- Memory Usage:");
        Runtime rt = Runtime.getRuntime();
        System.out.println("Total Memory = "
                           + rt.totalMemory()
                           + " Free Memory = "
                           + rt.freeMemory());
      }
    }

    注释

    ①    /*    */

    ②    //

    ③文档注释:用于提取注释的工具叫作javadoc。

    (1)文档标记

    /** 一个类注释 */
    public class docTest {
    /** 一个变量注释 */
    public int i;
    /** 一个方法注释 */
    public void f() {}
    }

    注意javadoc只能为 public(公共)和protected(受保护)成员处理注释文档。“private”(私有)和“friendly”(详见5 章)成员的注释会被忽略,我们看不到任何输出(也可以用-private标记包括private 成员)

    (2)嵌入HTML

    /**
    * <pre>
    * System.out.println(new Date());
    * </pre>
    */

    注意在文档注释中,位于一行最开头的星号会被javadoc 丢弃。同时丢弃的还有前导空格。不要将<h1>或<hr>这样的标题当作嵌入HTML 使用,因为javadoc会插入自己的标题,我们给出的标题会与之冲撞。

    @see :引用其他类

    所有三种类型的注释文档都可包含@see 标记,它允许我们引用其他类里的文档

    @see 类名
    @see 完整类名
    @see 完整类名#方法名

    注意 javadoc不会检查我们指定的超链接,不会验证它们是否有效

    类文档标记
    随同嵌入HTML 和@see 引用,类文档还可以包括用于版本信息以及作者姓名的标记。类文档亦可用于“接口”目的(本书后面会详细解释)。
     
    1. @version
    格式如下:
    @version 版本信息
    其中,“版本信息”代表任何适合作为版本说明的资料。若在 javadoc命令行使用了“-version”标记,就会从生成的 HTML 文档里提取出版本信息。
     
    2. @author
    格式如下:
    @author 作者信息
    其中,“作者信息”包括您的姓名、电子函件地址或者其他任何适宜的资料。若在javadoc命令行使用了“-author”标记,就会专门从生成的HTML 文档里提取出作者信息。 可为一系列作者使用多个这样的标记,但它们必须连续放置。全部作者信息会一起存入最终HTML 代码的单独一个段落里。

    变量文档只能包括嵌入的HTML 以及@see 引用

    方法文档标记
    除嵌入HTML 和@see 引用之外,方法还允许使用针对参数、返回值以及违例的文档标记。
     
    1. @param
    格式如下@param 参数名 说明
    其中,“参数名”是指参数列表内的标识符,而“说明”代表一些可延续到后续行内的说明文字。一旦遇到
    一个新文档标记,就认为前一个说明结束。可使用任意数量的说明,每个参数一个。
     
    2. @return
    格式如下:
    @return 说明
    其中,“说明”是指返回值的含义。它可延续到后面的行内。
     
    3. @exception 
    @exception 完整类名 说明
    其中,“完整类名”明确指定了一个违例类的名字,它是在其他某个地方定义好的。而“说明”(同样可以
    延续到下面的行)告诉我们为什么这种特殊类型的违例会在方法调用中出现。
     
    4. @deprecated
    这是Java 1.1 的新特性。该标记用于指出一些旧功能已由改进过的新功能取代。该标记的作用是建议用户不
    必再使用一种特定的功能,因为未来改版时可能摒弃这一功能。若将一个方法标记为@deprecated,则使用该
    方法时会收到编译器的警告。

    文档示例

    //: Property.java
    import java.util.*;
     
    /** The first Thinking in Java example program.
     * Lists system information on current machine.
     * @author Bruce Eckel
     * @author http://www.BruceEckel.com
     * @version 1.0 
    */
    public class Property {
      /** Sole entry point to class & application
       * @param args array of string arguments
       * @return No return value
       * @exception exceptions No exceptions thrown
      */
      public static void main(String[] args) {
        System.out.println(new Date());
        Properties p = System.getProperties();
        p.list(System.out);
        System.out.println("--- Memory Usage:");
        Runtime rt = Runtime.getRuntime();
        System.out.println("Total Memory = "
                           + rt.totalMemory()
                           + " Free Memory = "
                           + rt.freeMemory());
      }   59
    } ///:~
     
    第一行:
    //: Property.java
    将一个“:”作为特殊的记号,指出这是包含了源文件名字的一个注释行。最后一行也用这样的一条注释结尾,它标志着源代码清单的结束。这样一来,可将代码从本书的正文中方便地提取出来,并用一个编译器检查。

    编码样式

    类:每个单词首字母大写

    标识符:第一个单词首字母小写,后面的单词首字母大写

    class AllTheColorsOfTheRainbow {
    int anIntegerRepresentingColors;
    void changeTheHueOfTheColor(int newHue) {
    // ...
    }
    // ...
    }

  • 相关阅读:
    u-boot分析(九)----nand flash初始化|nand flash读写分析
    u-boot分析(八)----串口初始化
    u-boot分析(七)----内存初始化
    u-boot分析(六)----时钟初始化
    u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗
    u-boot分析(四)---设置异常向量表|设置SVC模式
    u-boot分析(二)----工作流程分析
    u-boot剖析(一)----Makefile分析
    Arm启动流程解析
    卷积神经网络中感受野的介绍
  • 原文地址:https://www.cnblogs.com/skysand/p/2323226.html
Copyright © 2011-2022 走看看