一:语法细节

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 语句块)。

Java基础中一些容易被忽视的语法小细节总结的更多相关文章

  1. Java基础中的RMI介绍与使用

    今天在这边介绍一下Java基础中的rmi使用.其实rmi有什么样的使用场景呢?它跟webservice有什么区别呢?其实webservice主要是可以跨语言实现项目间的方法调用,而rmi只是java内 ...

  2. Java基础中的一些注意点

    1.在Java编程语言中,标识符是赋予变量.类或方法的名称.标识符可从一个字母.下划线(_)或美元符号($)开始,随后也可跟数字.标识符是大小写区别对待的并且未规定最大长度. 2.Java技术源程序采 ...

  3. C++在使用Qt中SLOT宏须要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类假设覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但假设指针去调用非虚函数,这个时候会调用C++的静态绑定,去推断当前的指针是 ...

  4. C++在使用Qt中SLOT宏需要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类如果覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但如果指针去调用非虚函数,这个时候会调用C++的静态绑定,去判断当前的指针是 ...

  5. Java基础中字符串与字符的注意点!

    在Java中,字符的表达与字符串的表达是不一样的!话不多说,直接上代码!!! String  a="a"; char a='a'; 其中他们的引号是不一样的

  6. JAVA基础中的注意点(二)

    1.数组 a.特点:同种数据类型:数组类型一旦确定就不能改变. 连续空间存放:数据空间是连续的. 空间长度:数组有自己的长度,初始化的时候需要定义. 数组的下标:从0开始,第一个数组元素下标为0,最后 ...

  7. JAVA基础中的注意点

    1.标识符 标识符:标识某些事物用于区分的符号.  (即区分某些事物的符号) 四条硬性规定: a.不能是 关键字.true.false.null. b.可以包含 字母.数字.0-9.下划线(_)或美元 ...

  8. Java基础中的一些注意点(续)

    1.局部(local)变量是在一个方法内定义的变量, 也被称作自动(automatic).临时(temporary)或栈(stack)变量 -          当一个方法被执行时, 局部变量被创建: ...

  9. JAVA基础中的注意点(一)

    1.标识符 标识符:标识某些事物用于区分的符号.  (即区分某些事物的符号) 四条硬性规定: a.不能是 关键字.true.false.null. b.可以包含 字母.数字(0-9).下划线(_)或美 ...

随机推荐

  1. 一个类似抖音 APP 拍摄按钮效果的控件

    TouchButton 一个类似抖音 APP 拍摄按钮效果的控件 效果图预览 用法 <net.angrycode.library.TouchButton android:id="@+i ...

  2. 一名Java架构师分享自己的从业心得,从码农到架构师我用了八年

    工作了挺久,发现有个挺有意思的现象,从程序员.高级程序员,到现在挂着架构师.专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了. 这些疑问有些来自于跟小伙伴的交流,有些是我的自问自答 ...

  3. C语言第六次作业--数据类型

    一.PTA实验作业 题目1,简单计算器: 1. 本题PTA提交列表 2. 设计思路 定义操作数num1,num2,结果result=0.运算符ch. 输入num1 while (ch=getchar( ...

  4. RTC实时时间系统学习笔记(一)---------------UART串口

    临近研三了,自己倾向于要找数字IC方面的工作,苦于教研室的项目一直都是调板子调板子调板子,真正用到FPGA的很少,,本着"工欲善其事必先利其器"的原则,在网上搜寻如何自学FPGA, ...

  5. python-正铉

    第一步:安装插件 pip install Numpypip install matploatlib 第二步 导入包 import numpy as np import matplotlib.pylot ...

  6. Webpack的加载器

    一.什么是加载器(loaders)loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用load ...

  7. #Python3.6.2(32位) pip安装 和 pygame 环境配置

    #首先确认电脑已经安装python ,可通过在命令行下 执行 python --version确认. 1. 到 https://pypi.python.org/pypi/setuptools/ 下载 ...

  8. java排序算法(五):快速排序

    java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...

  9. [css 揭秘]:CSS揭秘 技巧(四):边框内圆角

    我的github地址:https://github.com/FannieGirl/ifannie/ 源码都在这上面哦! 喜欢的给我一个星吧 边框内圆角 问题:有时候我们需要一个容器,只在内侧有圆角,而 ...

  10. Android 的消息队列模型

    Android 的消息队列模型 Android是参考Windows的消息循环机制来实现Android自身的消息循环的.    Android通过Looper.Handler来实现消息循环机制,Andr ...