Java编程思想笔记2.一切都是对象

一年又一年,字节跳动 Lark(飞书) 研发团队又双叒叕开始招新生啦!
【内推码】:GTPUVBA
【内推链接】:https://job.toutiao.com/s/JRupWVj
【招生对象】:20年9月后~21年8月前 毕业的同学
【报名时间】:6.16-7.16(提前批简历投递只有一个月抓住机会哦!)
【画重点】:提前批和正式秋招不矛盾!面试成功,提前锁定Offer;若有失利,额外获得一次面试机会,正式秋招开启后还可再次投递。

点击进入我的博客

2.1 用引用操纵对象

尽管一切都看作对象,但操纵的标识符实际上是对象的一个“引用”。

String s;
// s是一个String类型的引用, 并没有任何对象与其关联
String str = "imbug";
// 创建str引用的时候同时进行初始化

2.2 必须由你创建所有对象

使用new操作符来创建新对象并与引用关联。

String str = new String("imbug");

2.2.1 存储到什么地方

  • 寄存器(不管你的事)——最快的存储区、位于处理器内部、空间极小、不能直接控制
  • 堆栈(栈)——位于RAM、堆栈指针向下移动分配新内存、堆栈指针向上释放内存、存储对象的引用
  • 堆——位于RAM、存放Java对象、耗时比堆栈长
  • 常量存储——程序代码内部
  • 非RAM存储——如磁盘

2.2.2 特殊:基本类型

问题:用new创建的对象在堆里,对访问频繁而且简单的对象代价太大。
方法:不用new创建变量,而是创建一个不是引用的变量,直接存储“值”在栈中。

基本类型 大小 最小值 最大值 包装器类型
boolean - - - Boolean
char 16bits 0 2^16-1 Character
byte 8bits -128 127 Byte
short 16bits -2^15 2^15-1 Short
int 32bits -2^31 2^31-1 Integer
long 64bits -2^63 2^63-1 Long
float 32bits - - Float
double 64bits - - Double
void - - - Void
关于存储空间

Java确定每种基本数据类型所占空间的大小,跟硬件平台无关。

关于boolean类型
  • boolean类型所占类型的大小没用明确指定,今定义为能够取字面值truefalse
  • 在《Java虚拟机规范》一书的描述,“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。
  • 这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。
  • 根据http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html官方文档的描述:The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
关于高精度数字

Java提供了BigInteger和BitDecimal两个高精度计算的类,但是没有对应的基本类型。

2.2.3 数组

Java确保数组会被初始化,而且不能在它的范围之外被访问;这种范围检查的原理是每个数组上的少量内存开销和运行时的下标检查。
创建一个数组对象Object[] arr = new Object[10];时,实际上是创建了一个引用的数组,数组中的每个引用都自动被初始化为null;如果是创建的是基本数据类型数组,则会讲该数组所占的栈内存全部置为0。

2.3 永远不需要销毁对象

2.3.1 变量以及基本类型的作用域

Java语言中,作用域由花括号{}位置决定,在作用域中定义的变量只可作用于作用域结束之前。

2.3.2 对象的作用域

Java对象和基本类型的生命周期不一致。

{
    String str = new String("imbug");
}

上述代码中当超出}的范围之后,引用str已经消失了,但它指向的String对象仍然存在在堆内存中,但我们无法访问该对象,因为它的引用已经消失。
Java使用垃圾回收器来管理new创建的对象,并辨别那些不会再被使用的对象,然后释放其占据的内存空间。

2.4 创建新的数据类型:类

使用class关键字来表示“一种新的类型”。
在Java中,你的工作就是定义,产生这些类的对象,以及发送消息给这些对象。

class ClassName {
}
字段(数据成员):可以是任何的对象和基本数据类型
  • Java会对全部字段进行初始化
  • 基本数据类型初始值为0(false、\u0000等…)
  • 对象的引用初始值null
  • 当变量作为类的成员时才会被初始化,局部变量不会被初始化
方法(成员函数):详见2.5节

2.5 方法、参数和返回值

ReturnType methonName( /* Arguement list */ ) {
    /* Method body */
}
  • Java方法决定了一个对象能够接收什么样的消息。
  • 方法的基本组成包括:名称、参数、返回值、方法体
  • 方法名和参数列表唯一的标识出某个方法。
  • Java中的方法只能作为类的一部分来创建。
参数列表
  • 方法的参数列表指定要传递给方法什么样的信息。
  • 参数列表中必须指定每个所传递对象的类型及名字。
  • 传递的实际上是引用。
  • 如果返回的类型是void,则return的作用仅是退出方法;否则必须返回正确的返回值

2.6 包名、import、static

名字可见性

Java约定以域名反转作为包名,用.来划分子目录,并且全部小写。

import关键字

使用import关键字引用其他定义好的类

static关键字

现象:创建一个class的时候,只是描述一个类的对象的外观与行为。在new创建该类的对象之后,才会分配数据存储空间,其方法才可以被外界调用。
问题:只想为特定域分配单一存储空间而不想去分配多少对象;希望某个方法不与包含它的类的任何对象关联在一起。
方法:static关键字

  • 当声明一个事物是static时,就意味着这个字段或者方法不与任何对象绑定在一起
  • 不需要创建对象也可以访问该类的任何static域和static方法
  • 即使没有显示地声明为static,类的构造器实际上也是静态方法
  • 和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。如果你的类代表羊,那么创建的若干的该类的对象,就好像建了一个羊群,然而,类中的static方法就好比牧羊人一样,无论你的羊群中有多少只羊,而牧羊人只有一个。也就是说, static方法或属性与对象的创建无关,只和类有关。

2.7 main方法、编译、运行

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        // main方法args用于接收命令行参数
        System.out.println(new Date());
    }
}

2.8 注释和文档

2.8.1 java的注释

/* 多行注释 */
// 单行注释

2.8.2 javadoc

javadoc是用于提取注释的工具,他可以找出程序内的特殊注释标签并解析。
javadoc输出的是一个HTML文件。
所有javadoc命令都只能在/* */注释中出现。
使用javadoc有两种方式:嵌入HTML或使用文档标签
独立文档标签:@字符开头,且要置于注释行的最前面
行内文档标签:出现在任何地方,以@开头,但要放在{}
javadoc只能为publicprotect成员进行文档注释,private包内可访问的注释会被忽略,输出结果中看不到它们。使用-private标记可以把private注释也包括进去。

2.8.3 嵌入式HTML

不要在嵌入式HTML标签中使用标题如<h1><hr>,否则会跟javadoc自己的标题冲突。

2.8.4 文档标签

  • @see package.class#member:允许用户引用其他类的文档
  • {@link package.class#member}:跟@see相似,只是它用于行内
  • {@docRoot}:该标签产生到文档根目录的相对路径,用于文档树
  • {@inheritDoc}:从这个类的基类继承相关文档到当前文档注释中
  • @version:版本信息;-version标记可以从生成的HTML中提取出版本信息
  • @author:作者信息;-author标记;可以使用多个@author标签但是必须连续放置
  • @since:程序代码最早的版本
  • @param:方法的参数
  • @return:方法的返回
  • @throws:异常抛出
  • @deprecated:过时

2.8.5 编码风格

类名:首字母大写、多个字母驼峰法
域名&方法名:首字母小写、多个字母驼峰法

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

推荐阅读更多精彩内容

  • 1.用句柄操作对象 拥有一个句柄,并不表示必须有一个对象同它连接。创建一个句柄时,记住无论如何都进行初始化: 这里...
    王侦阅读 193评论 0 0
  • "你丢过手机,丢过钥匙,丢过驾驶证..这次你又丢了身份证,还搭上我们娘俩的...下次你丢了自己前能不能先提前告诉...
    怡然庄主阅读 694评论 0 0
  • 若世上有十分美,有九分在耶路撒冷。若世上有十分哀愁,亦有九分在耶路撒冷。——《塔木德》 耶路撒冷燃烧着十字军的渴望...
    石辣西阅读 1,826评论 0 1
  • 翻出以前零散记录的一些笔记,当时有用的,现在有一两点启发,如下。 1.学员分析。不止分析学员的知识基础和需求,还要...
    Miracle嗨阅读 227评论 0 0