一:语法细节

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. Python 中 Iterator(迭代器)和Iterable(迭代对象)的区别

    直接可以用作for循环的数据类型有以下几种: tuple.list.dict.str等, 上述数据类型可以用作for循环的叫做可迭代对象Iterable.可以使用isinstance判断一个对象是否是 ...

  2. java操作数据库的通用的类

    package cn.dao; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; ...

  3. Chrome浏览器及调试教程

    ==>(微信公众号:IT知更鸟)欢迎关注<^>@<^> Chrome浏览器及调试教程 在web开发过程中,我们在写JavaScript脚本时难免会遇到各种bug,这时,我 ...

  4. Java基础学习笔记十四 常用API之基本类型包装类

    基本类型包装类 Java中有8种基本的数据类型,可是这些数据是基本数据,想对其进行复杂操作,变的很难.怎么办呢?在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们 ...

  5. oracle数据库修改连接数

    最近在用weblogic部署项目,同时用的是oracle数据库,然后今天遇到一个问题:多个用户连接数据库连接不成功,有时提示被锁住,经检查发现一方面weblogic控制台中数据源的连接池配置没有配置足 ...

  6. beta冲刺 用户使用调查报告

    测评结果 一.使用体验 数据加载响应很快,页面切换丝滑流畅. UI有点偏暗,有些字被覆盖了. 页面布局过于居中,两侧空白范围较大. 总体功能完善. 二.登录.注册.忘记密码界面 管理员登录按钮太靠下, ...

  7. Alpha冲刺No.6

    站立式会议 继续页面设计 在安卓内构件数据库相应类 解决摄像头.照片的使用的异常问题 二.实际项目进展 页面设计完成百分80 类架构完成 在虚拟机中,能够完成摄像头的调用和程序的使用 三.燃尽图 四. ...

  8. 201621123062《java程序设计》第11周作业总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 思维导图: 2. 书面作业 本次PTA作业题集多线程 2.1. 源代码阅读:多线程程序BounceThread 2 ...

  9. hibernate框架学习错误集锦-org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL)

    最近学习ssh框架,总是出现这问题,后查证是没有开启事务. 如果采用注解方式,直接在业务层加@Transactional 并引入import org.springframework.transacti ...

  10. zookeeper 启动失败 BindException: Address already in use 或者Error contacting service. It is probably not running

    平台:centos-6.3-i386 jdk-7u51 storm 0.9.1 python 2.6.6   hadoop 1.2.1 今天上午装storm的时候遇到这个问题,好郁闷.把网上介绍的方法 ...