Thinking in Java

2. 一切都是对象

2.1 引用控制对象

  1. 引用:操纵的标识符是对象的一个引用

    String s;
    

2.2 必须由你创建所有对象

  1. 关联新对象

    String s = new String("abcd");
    
  2. 引用和对象解析——重点

    • 等式右边,是新建一个对象,放置在堆中,并赋值“abcd”,如果括号内为空,则使用新建类的无参构造方法
    • 等式左边,是新建一个引用,放置在堆栈中
    • 等号代表将引用指向对象(类似指针),因此一个对象可以有多个引用,但一个引用只有0或1个对象

2.2.1 存储位置

  1. 寄存器:最快的存储区,位于处理器内部
  2. 堆栈:位于通用RAM(随机访问存储器),需要知道所有存储项的生命周期
    • 创建一个并非是引用的“自动”变量,这个变量直接存储值并放置在堆栈中,更高效
    • 引用放置在堆栈中
  3. 堆:通用的内存池(位于RAM区),存放所有java对象,不需要知道生命周期
    • new一个对象,存储在堆中
    • 基本类型的包装类,可以在堆中创建一个非基本对象
  4. 常量存储:常量值通常直接存储在程序代码内部,安全
  5. 非RAM存储:可以不受程序控制
    • 基本例子
      1. 流对象:对象为字节流,通常被发送给另一台机器
      2. 持久化对象:对象存放在磁盘上,需要时恢复成常规、基于RAM的对象

2.2.2 特例:基本类型

  1. 基本类型的大小和包装器类型
    • 所有数值都有正负号
    • boolean类型大小无明确制定,仅字面值true或false
  2. 基本类型与包装类的区别
    • 声明方式:基本类型不使用new关键字;包装类型使用new关键字在堆中分配存储空间
    • 存储方式及位置:基本类型将变量存储在堆栈中;包装类将对象放在堆中,通过引用使用
基本类型 大小 最小值 最大值 包装器类型
boolean - - - Boolean
char 16-bit Unicode 0 Unicode 2^16 -1 Character
byte 8 bits -128 +127 Byte
short 16 bits -2^15 +2^15 - 1 Short
int 32 bits -2^31 +2^31 - 1 Integer
long 64 bits -2^63 +2^63 - 1 Long
float 32 bits IEEE754 IEEE754 Float
double 64 bits IEEE754 IEEE754 Double
void - - - Void
  1. 高精度数字

    • BIgInteger:任意精度的整数
    • BigDecimal:任何精度的定点数
  2. 自动包装功能

    • 自动将基本类型转换成包装器类型

      // 基本类型
      Integer i = 5;
      // 包装器类型
      Integer i = new Integer(5);
      /*
      自动包装:基本类型的声明方式会自动转成包装器类型的声明方式
      */
      

2.2.3 Java中的数组

在使用任何引用前,必须指定一个对象

2.3 不需要销毁对象

2.3.1 作用域

  1. 作用域:决定了在其内定义的变量的可见性和生命周期

    {int x = 12;
     x is available
      {
        int p = 11;
        // x/p are availbale
      }
         x is available
       p is out of scope
    }
    

2.3.2 对象的作用域

  1. 对象的生命周期:引用将在作用域终点消失,但是对象将继续占据内存空间,而java的垃圾回收器将监视new的对象,对象不再使用时,会自行消失

2.4 创建新的数据类型:类

  1. class关键字之后跟着的是新类型的名称

2.4.1 字段和方法

  1. 字段(数据成员):任何类型的对象

    • 引用对象的成员:在对象引用的名称后加句点,然后再加上对象内部成员的名称
    data.i = 47;
    

2.5 方法、参数和返回值

  1. 方法的基本组成:名称、参数列表、返回值、方法体

    ReturnType methodName(Argument list){method body};
    
  2. 调用方法:对象名紧跟句点,然后是方法名和参数列表

2.5.1 参数列表

参数列表中必须指定每个所传递对象的类型和名称

  1. 关键字return的用法

    • 离开方法:如无需返回值(返回类型为void),可使用return来结束当前方法
    • 传递返回值
  2. 命令行参数

    • main()函数中的String[] args

    • 能够获取到命令行中的参数并输出,idea需要在项目中添加program arguments

      package com.ten;
      
      public class TestArguement {
          public static void main(String[] args) {
              System.out.println("args[0]"+args[0]);
              System.out.println("args[1]"+args[1]);
              System.out.println("args[2]"+args[2]);
          }
      }
      

2.6 其他

2.6.1 名字可见性

  1. 如果两个模块使用相同名字,如果避免冲突
    • 反转使用Internet域名:mindset.net反转后net.mindset.utility.foibles

2.6.2 运用其他构件

  1. 使用import导入包,同时可使用通配符*

2.6.3 static关键字

  1. 用法

    • 为某特定域分配单一的存储空间
    • 实现不创建对象,也能调用方法——主要用法
  2. 引用方法

    class StaticTest(){
     static int i = 47;
    }
    
    //1.通过对象定位
    StaticTest st1 = new StaticTest();
    st1.i;
    //2.通过类名直接引用
    StaticTest.i;
    
  3. 存储空间

    class StaticTest(){
     static int i = 47;
    }
    StaticTest st1 = new StaticTest();
    StaticTest st2 = new StaticTest();
    //即使创建两个对象,StaticTest.i也仅有一份存储空间
    

2.8 注释和嵌入式文档

  1. 注释类型

    /*
    1.多行注释
    */
    
    // 2.单行注释
    

2.8.1 注释文档

  1. javadoc:提取注释的工具
  2. javadoc只能为public和protected成员进行文档注释,因为private成员预期是无法在文件之外被使用的
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 随着计算机革命的发展,“不安全”的编程方式已逐渐称为变成代价高昂的主因之一初始化和清理(cleanup)正是设计线...
    海生2018阅读 227评论 0 0
  • Java 与其他语言的不同之处,是它在设计的时候就把目标专注于克服开发与维护程序的复杂性。然而很多EE特性和乱七八...
    Perebor阅读 306评论 0 1
  • 抽象过程 所有编程语言都提供抽象机制。汇编语言是对机器语言的抽象,“命令式语言”(C、BASIC等)是对汇编语言的...
    海生2018阅读 171评论 0 0
  • 第一章 对象导论 1.1抽象过程 所有编程语言都是在提供对问题的抽象。汇编语言是对底层机器的抽象;命令式语言(如c...
    麦崎阅读 366评论 0 0
  • ========================== 在看TIJ之前,已经有了C/C++的一点基础。最近因为参加学...
    geverway阅读 2,250评论 0 2