TIJ学习总结(1)- Java基础语法
TIJ(Thinking in Java)作为Java学习书籍里的“圣经”,之前花两个月系统的捋了一遍,很多东西有种豁然开朗的感觉,入门之后读一遍TIJ,相信会有很多意外收获哦~
一:语法细节
1. Java中的命名规则:
- package:统一使用小写字母
- class:首字母大写,使用驼峰标识
- method:首字母小写,使用驼峰标识
- field:首字母小写,使用驼峰标识
- static field:统一使用大写字母,并用下划线分割单词
2. import和import static
- import com.xxx:常规导入某个包下的类
- import static com.xxx:会导入某个包下的类的所有静态方法,这样之后再使用该类的静态方法时,可以直接使用方法名调用,而不必使用 类名.方法名 来调用静态方法
示例:

3. println和print
- System.out.println:在下次打印时自动换行
- System.out.print:在下次打印时不自动换行
4. Java访问权限修饰符

每个编译单元(即一个.java文件)都只能有一个public类,表示每一个编译单元都有一个单一的公共接口,用public类来展现。
5. final关键字
- final 修饰的基本数据类型一旦初始化则数值恒定不变
- final 修饰的对象引用表示:该引用一旦被初始化指向某个对象,就无法再将它改变为指向另一个对象(注意引用指向的对象自身是可以改变的)
- final 修饰的类不允许被任何子类继承
- final 修饰的方法将会被锁定,任何子类都无法修改它
- 声明为 final 的域可以在一开始不给定初值,但是编译器会确保该域在使用前必须初始化
- 由 static final 修饰的域将会占据一段不能改变的存储空间
二:基本数据类型
|
基本类型 |
大小 |
初始值 |
包装类 |
最小值 |
最大值 |
|
boolean |
- |
false |
Boolean |
- |
- |
|
char |
16-bit |
'\u0000' |
Character |
‘\u0000’ (0) |
‘\uffff’ (65535) |
|
byte |
8-bit |
0 |
Byte |
-128 |
127 |
|
short |
16-bit |
0 |
Short |
- 2^15 (负的2的15次方) |
2^15 - 1 |
|
int |
32-bit |
0 |
Integer |
- 2^31 |
2^31 - 1 |
|
float |
32-bit |
0.0f |
Float |
IEEE754 |
IEEE754 |
|
double |
64-bit |
0.0d |
Double |
IEEE754 |
IEEE754 |
|
long |
64-bit |
0L |
Long |
- 2^63 |
2^63 - 1 |
1. 创建基本数据类型不需要 new 操作符。
2. 当基本类型变量作为类的成员变量使用时,才会在初始化时被赋予初值;作为方法体中的局部变量时,则必须要被初始化才能使用。
3. 对象引用的默认初始值为null。
4. float / double 转换为整型时,总是对该数字执行截尾操作(四舍五入效果实现需要使用 java.lang.Math.round() 方法)。
5. 用于高精度计算的类:
- BigInteger(支持任意大小的整数值)
- BigDecimal(支持任意精度的定点数)
(定点数:指参与运算的数的小数点位置固定不变)
能作用于 int / float 的操作同样也能作用于 BigInteger / BigDecimal,只是 BigInteger / BigDecimal 需以方法调用的方式使用,而不是以运算符的形式来使用。
6. 基本类型之间比较是否相同可以直接使用“==”;
对象之间比较是否相同需要使用 equals() 方法;对象之间如果使用“==”操作符比较,实际比较的是两个对象的引用地址。
7. 算术运算中,表达式中出现的最大数据类型决定了表达式最终结果的数据类型(比如:一个float值与一个double值相乘,结果值是double类型);
char / byte/ short 中任意一个或一个以上进行算术运算(如 ’a’+’b’ ),都会获得一个 int 型的结果;
从较大范围的类型向较小范围的类型转换时,可能引发某些信息的丢失。
三:Java中对象的四种引用类型
1. StrongReference -- 强引用

强引用是最普遍的引用,垃圾回收器不会回收强引用的对象;当内存空间不足时,JVM 宁愿抛出 OutOfMemoryError 也不会回收强引用对象以释放部分内存空间;
强引用对象 o 不使用时可以通过如下方式弱化引用:
(现在的JVM垃圾回收机制其实已经足够智能,不必特意在o无用时将其手动置为null)
2. SoftReference -- 软引用

如果一个对象只具有软引用,则:
- 当内存空间足够时,垃圾回收器不会回收该对象;
- 当内存空间不足时,垃圾回收器就会回收该对象;
使用场景:软引用可以用来实现内存敏感的高速缓存:
例如:浏览器中的后退按钮按下时,之前的网页内容是应该重新获取还是从缓存中取出呢?
如果一个网页在浏览结束时就进行内容的回收,则每次按后退按钮时都要重新构建之前的页面内容;如果将浏览过的网页都存储在内存(缓存)中,会造成大量的资源浪费;这时候就可以考虑使用软引用来指向过去浏览过的网页内容。
3. WeakReference -- 弱引用

弱引用与软引用区别:只具有弱引用的对象拥有更短的生命周期;当垃圾回收器扫描到只具有弱引用的对象时,无论当前内存空间是否足够,都会回收它;
使用场景:一个对象只是偶尔使用,希望在使用时能随时获取,但也不想影响对该对象的垃圾收集,则可以考虑使用弱引用来指向该对象。
4. PhantomReference -- 虚引用
虚引用不会决定对象的生命周期,如果一个对象仅仅持有虚引用,那它就像没有任何引用一样,随时可能被垃圾收集器回收;
虚引用必须和引用队列联合使用,主要用来跟踪对象被垃圾收集器回收的活动过程。
5. 对比
StrongReference(强引用) > SoftReference(软引用) > WeakReference(弱引用) > PhantomReference(虚引用)

四:关于方法的一些细节
1. 重载方法与重写方法
a)重载方法(Overload)
多用于同一个类中;
- 重载方法的方法名完全相同,参数列表不同
- 返回值不能参与区分重载方法
b)重写方法(Overwrite)
多用于继承父类的子类或接口实现类中;
- 重写方法中,子类的方法名、参数列表、返回值、访问修饰符应该与父类中的完全一致
2. 在没有为类提供构造器的情况下,编译器会自动为该类添加一个默认构造器;但是一旦为类指定了构造器,则编译器就不会再自动添加默认构造器了。
3. 方法的方法名和参数列表组合起来作为“方法的特征签名”,唯一的标识出某个方法;
4. static 的域或方法不跟类的对象绑定,可以通过类名或方法名直接调用(不能在 static 方法中调用非静态方法);
非static 的域或方法必须通过类的对象来调用;
static 关键字不能用于局部变量。
5. 在方法体的传入参数中:基本数据类型在传递时是值传递(传递原值的拷贝值),对象在传递时是引用传递。
6. 方法体内的局部变量存储在方法栈中,类的成员变量存储在堆中。
7. 可变参数列表
语法格式:MethodName(类型… 参数名称)
使用示例:

五:控制语句
1. break和continue
- break:用于强行退出当前循环
- continue:用于停止本次迭代,然后返回起始处开始下一次迭代
2. 带标签的break和continue
- break outer:中断当前循环并跳出标签所指的循环
- continue outer:重新跳到标签的位置,并开始标签之后声明的循环
用法示例:

使用带标签的 break / continue 的原因是:为了跳出或重新开始多层嵌套循环。
3. switch
switch 语句可以用于实现多路选择,但是要注意 break 穿刺问题(即如果上一个 case 里没有 break 语句,则该 case 执行完成后会顺势执行下一个 case 语句块)。
TIJ学习总结(1)- Java基础语法的更多相关文章
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- JavaSE入门学习6:Java基础语法之运算符和语句(上)
继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...
- Java 学习笔记(1)——java基础语法
最近抽时间在学习Java,目前有了一点心得,在此记录下来. 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础一点点的写,我想根据我已有的C/C++经验 ...
- Java基础学习笔记三 Java基础语法
Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...
- Java基础学习笔记四 Java基础语法
数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- JavaSE入门学习5:Java基础语法之keyword,标识符,凝视,常量和变量
一keyword keyword概述:Java语言中有一些具有特殊用途的词被称为keyword.keyword对Java的编译器有着特殊的意义.在程 序中应用时一定要谨慎. keyword特点:组成k ...
- Java基础学习笔记二 Java基础语法
注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public vo ...
- Java基础学习笔记六 Java基础语法之类和ArrayList
引用数据类型 引用数据类型分类,提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类.我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner ...
随机推荐
- VS2015智能提示由英文改为中文
使用 VS2015 时,在 4.0 下智能提示显示中文,在 4.5 下显示英文,对于我这种爱(ying)国(yu)人(tai)士(lan)来说,用起来太不方便了,于 是在 知乎 上找到个好方法如下: ...
- JAVAEE企业级应用开发浅谈第二辑:MVC和三层架构
上海尚学堂警句:一份信心,一份努力,一份成功:十分信心,十分努力,十分成功. Step1.情景概要 Hello,小伙伴们,昨天跟大家分享了JAVA EE 企业级应用开发中大家耳熟能详的概念-三层架构, ...
- Javascript里的if判断与逻辑运算符(||, &&)和比较运算符的特别之处
写JS时不可避免要用到 if 与 逻辑运算符( ||, &&). 如果你经常阅读Js的第三方组件源码, 会发现有一种写法作为初始化变量的方法经常出现. var variable = v ...
- 微信公众平台开发接口PHP SDK
以前没接触过微信公众平台开发,前几天刚找到实习公司就要求我做一个微信公众平台的应用,于是乎开始学习微信公众平台开发接口的调用,看开发文档之后还是不知道从何入手,只好上网找入门资料,终于在方倍工作室找到 ...
- javascript的一些算法的实用小技巧
一.交换两个数字的值 我们交换两个数字的值想到的方法一般就是用一个新的变变量,让他把一个数存起来,然后在交换两个数字的值,看下面这种. var a = 1, b = 2; //交换两个数字的值 var ...
- C# Request.InputStream 读取输入流为空的原因处理
今天在手机App测试接口的时候发现一个通过POST方式的接口 获取body中的参数一直为空,但是在数据量小的时候却可以获取到数据,开始怀疑是不是POST的长度有限制,然后在web.config中修改了 ...
- Establish the LAMP (Linux+Apache+MySQL+PHP) Development Environment on Ubuntu 14.04 Operating System
######################################################## Step One: Update the software package in yo ...
- How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
############################### PART ONE ############################### #1. Introduction of the ...
- Django web框架篇:基础
对于web开发者来说,socket是基础.因为Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 对于真实开发中的python web程序来说,一般会分为两 ...
- js返回到上一个页面刷新与不刷新的写法
返回上个页面刷新: <script>window.location.href=document.referer</script> 返回上个页面不刷新 <script> ...