java小知识点2
2016-06-25 11:01
211 查看
类中引用类型没有赋初值的问题
情况1:类中引用类型默认为null。
Try...catch...finally与直接throws的区别:try
catch是直接处理,处理完成之后程序继续往下执行,throws则是将异常抛给它的上一级处理,程序便不往下执行了(已验证)。本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止了
运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
java标识符规定:标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字 不能当作Java标识符。
关于对象序列化:
能够对对象进行传输的貌似只有ObjectOutputStream和ObjectInputStream这些以Object开头的流对象。
3、实现了Seriallizable接口的类对象才能被序列化。
4、transient 修饰的变量在对象串化的时侯并不会将所赋值的值保存到传中,串化的对象从磁盘读取出来仍然是null。声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据。
5、这值得说下Volatile这个修饰符,它是针对多线程情况下出现的。当线程读取它修饰的变量时,都会强迫从主存中重新读取。
java多线程中的volatile:
Java 语言提供了一种稍弱的同步机制,即 volatile
变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的.
volatile 变量对所有线程是立即可见的,对 volatile 变量所有的写操作都能立即反应到
其他线程之中,换句话说:volatile 变量在各个线程中是一致的,所以基于 volatile 变量的运算是线程安全的.
情况1:类中引用类型默认为null。
public class test3 { String s; public static void main(String[] args) { test3 test=new test3(); System.out.println(test.s);//输出为null; } }情况2:
public class test3 { static String s;//若不为static不能在static的main方法中输出 public static void main(String[] args) { System.out.println(s);//输出为null; } }情况3:前两种为类内实例域,默认为null;第三种情况为main方法中的局部变量,不初始化不能使用
public class test3 { public static void main(String[] args) { String s; System.out.println(s);//未初始化变量,不能输出 } }
Try...catch...finally与直接throws的区别:try
catch是直接处理,处理完成之后程序继续往下执行,throws则是将异常抛给它的上一级处理,程序便不往下执行了(已验证)。本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止了
public class ZeroTest { public static void main(String[] args) { try{ int i = 100 / 0; System.out.print(i); }catch(Exception e){ System.out.print(1); throw new RuntimeException(); }finally{ System.out.print(2); } System.out.print(3); } }
运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
java标识符规定:标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字 不能当作Java标识符。
关于对象序列化:
能够对对象进行传输的貌似只有ObjectOutputStream和ObjectInputStream这些以Object开头的流对象。
3、实现了Seriallizable接口的类对象才能被序列化。
4、transient 修饰的变量在对象串化的时侯并不会将所赋值的值保存到传中,串化的对象从磁盘读取出来仍然是null。声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据。
5、这值得说下Volatile这个修饰符,它是针对多线程情况下出现的。当线程读取它修饰的变量时,都会强迫从主存中重新读取。
java多线程中的volatile:
Java 语言提供了一种稍弱的同步机制,即 volatile
变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的.
volatile 变量对所有线程是立即可见的,对 volatile 变量所有的写操作都能立即反应到
其他线程之中,换句话说:volatile 变量在各个线程中是一致的,所以基于 volatile 变量的运算是线程安全的.
相关文章推荐
- java swing实现的学生教师选课管理系统代码
- SSM框架整合( Spring 、 SpringMVC 和 Mybatis )
- Java类属性的私有化
- byte[]作为Map key的问题
- Java HashMap工作原理
- 华为机试---乘坐公交
- java调用存储过程
- java.lang.IllegalArgumentException: x + width must be <= bitmap.width()问题
- java JTable刷新问题
- Java千百问_03基础语法(018)_注释是什么
- Android Studio中常用设置与快捷键(私人珍藏,Eclipse转AS必看)
- 轻松搞定java内存模型(六)堆内存溢出实例
- java的三大特性——封装
- JAVA设计模式之代理模式
- Java千百问_01基本概念(014)_同步、异步有什么区别
- java web之面向接口编程
- java下double相乘精度丢失问题
- Java读取Level-1行情dbf文件极致优化(2)
- 浅谈Struts2和Servlet的不同
- JAVA成员变量与局部变量的关系