1. public class Main {
  2. public static void main(String[] args) {
  3. ((NULL)null).haha();
  4. }
  5. }
  6.  
  7. class NULL {
  8. public static void haha(){
  9. System.out.println("haha");
  10. }
  11. }

结果:

haha

输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值还是为null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象肯定会报空指针错了。这里和C++很类似。

如果haha方法不是静态方法,那么编译器报错

  1. Exception in thread "main" java.lang.NullPointerException

======================================================================

  1. public class Main {
  2. public static void main(String[] args) {
  3. System.out.println("-------main start-------");
  4. new HelloB();
  5. new HelloB();
  6. System.out.println("-------main end-------");
  7. }
  8. }
  9.  
  10. class HelloA {
  11.  
  12. public HelloA() {
  13. System.out.println("HelloA");
  14. }
  15.  
  16. { System.out.println("I'm A class"); }
  17. { System.out.println("I'm AAA class"); }
  18. static { System.out.println("static A"); }
  19.  
  20. }
  21.  
  22. class HelloB extends HelloA {
  23. public HelloB() {
  24. System.out.println("HelloB");
  25. }
  26.  
  27. { System.out.println("I'm B class"); }
  28. { System.out.println("I'm BBB class"); }
  29. static { System.out.println("static B"); }
  30. }

结果:

  1. -------main start-------
  2. static A
  3. static B
  4. I'm A class
  5. I'm AAA class
  6. HelloA
  7. I'm B class
  8. I'm BBB class
  9. HelloB
  10. I'm A class
  11. I'm AAA class
  12. HelloA
  13. I'm B class
  14. I'm BBB class
  15. HelloB
  16. -------main end-------

考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。

对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;

(2)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

=========================================================================================

  1. public class Main {
  2. public static void main(String[] args) {
  3. getValue();
  4. }
  5.  
  6. public static void getValue() {
  7. char x = 'B';
  8. switch (x){
  9. case 'A': System.out.printf("A");
  10. case 'B': System.out.printf("B");
  11. case 'C': System.out.printf("C");
  12. default: System.out.printf("D");
  13. }
  14. }
  15. }

结果:

  1. BCD

case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即"只是开始执行处的入口标号".

因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行,而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不在判断是否与之匹配,直到遇到break语句才停止执行。

=====================================================================

java 序列化

代码:

  1. public class Main {
  2. public static void main(String[] args) {
  3. User user = new User();
  4. user.setUsername("Alexia");
  5. user.setPasswd("123456");
  6. user.sex="female";
  7. System.out.println("read before Serializable: ");
  8. System.out.println("username: " + user.getUsername());
  9. System.out.println("password: " + user.getPasswd());
  10. System.out.println("sex: " + user.sex);
  11. try {
  12. ObjectOutputStream os = new ObjectOutputStream(
  13. new FileOutputStream("C:/user.txt"));
  14. os.writeObject(user); // 将User对象写进文件
  15. os.flush();
  16. os.close();
  17. } catch (FileNotFoundException e) {
  18. e.printStackTrace();
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. try {
  23. ObjectInputStream is = new ObjectInputStream(new FileInputStream(
  24. "C:/user.txt"));
  25. user = (User) is.readObject(); // 从流中读取User的数据
  26. is.close();
  27.  
  28. System.out.println("\nread after Serializable: ");
  29. System.out.println("username: " + user.getUsername());
  30. System.out.println("password: " + user.getPasswd());
  31. System.out.println("sex: " + user.sex);
  32. } catch (FileNotFoundException e) {
  33. e.printStackTrace();
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. } catch (ClassNotFoundException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40.  
  41. }
  42. class Person {
  43. private String city="shanghai";
  44. public String sex="male";
  45. }
  46.  
  47. class User extends Person implements Serializable {
  48. private static final long serialVersionUID = 8294180014912103005L;
  49.  
  50. private String username;
  51. private transient String passwd;
  52.  
  53. public String getUsername() {
  54. return username;
  55. }
  56.  
  57. public void setUsername(String username) {
  58. this.username = username;
  59. }
  60.  
  61. public String getPasswd() {
  62. return passwd;
  63. }
  64.  
  65. public void setPasswd(String passwd) {
  66. this.passwd = passwd;
  67. }
  68. }

结果:

  1. read before Serializable:
  2. username: Alexia
  3. password: 123456
  4. sex: female
  5.  
  6. read after Serializable:
  7. username: Alexia
  8. password: null
  9. sex: male

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化

可以发现sex属性没有被序列化,这是因为父类没有继承Serializable接口,如果继承接口就可以序列化。

===================================================================================

  1. public class Main {
  2. public static void main(String[] args) {
  3. System.out.println("X = " + A.X + ", Y = " + B.Y);
  4. //System.out.println("Y = " + B.Y + ", X = " + A.X);
  5. }
  6. }
  7.  
  8. class A {
  9. public static int X;
  10.  
  11. static {
  12. X = B.Y + 1;
  13. }
  14. }
  15.  
  16. class B {
  17. public static int Y = A.X + 1;
  18. static {
  19. }
  20. }

结果:

  1. X = 2, Y = 1

首先加载类A,然后调用B.Y,加载类B,调用A.X,此时A.X为0

可以取消注释再运行试试。

============================================================

http://www.cnblogs.com/lanxuezaipiao/p/3369962.html

http://www.cnblogs.com/lanxuezaipiao/p/3371224.html

http://www.cnblogs.com/lanxuezaipiao/p/4170157.html

Java 收集的代码 transient的更多相关文章

  1. 正则表达式学习笔记(附:Java版示例代码)

    具体学习推荐:正则表达式30分钟入门教程 .         除换行符以外的任意字符\w      word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s        space,空白符 ...

  2. java俄罗斯方块游戏代码

    java俄罗斯方块游戏代码: package com; import java.awt.Color; import java.awt.Graphics; import java.awt.event.K ...

  3. java常用用代码

    /** *Java获取IP代码 */ import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.ev ...

  4. java学用代码

    /** *Java获取IP代码 */ import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.ev ...

  5. 分享非常有用的Java程序(关键代码)(七)---抓屏程序

    原文:分享非常有用的Java程序(关键代码)(七)---抓屏程序 import java.awt.Dimension; import java.awt.Rectangle; import java.a ...

  6. 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)

    原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...

  7. 分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map

    原文:分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map import java.util.Map; import org.apache.commons.lang.Ar ...

  8. 分享非常有用的Java程序 (关键代码)(四)---动态改变数组的大小

    原文:分享非常有用的Java程序 (关键代码)(四)---动态改变数组的大小 /** * Reallocates an array with a new size, and copies the co ...

  9. 分享非常有用的Java程序 (关键代码) (二)---列出文件和目录

    原文:分享非常有用的Java程序 (关键代码) (二)---列出文件和目录 File dir = new File("directoryName"); String[] child ...

随机推荐

  1. HTML练习----注册界面

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 【原】Windows下Nexus搭建Maven私服

    一.Maven安装 详见Java开发环境搭建 二.Nexus安装 2.1.下载 地址:http://www.sonatype.org/nexus/go/ 选择OSS(ZIP)版本 2.2.安装 将安装 ...

  3. [办公应用]我的WORD文档表格操作不灵活 无法调整列宽

    最近同事的一个word文档中的表格操作非常不灵活,用鼠标直接调整列宽时总觉得很不灵活.她的操作系统为XP,office 为微软office 2003. 我首先检查了木马,检查了输入法等,结果都没有问题 ...

  4. A trip through the Graphics Pipeline 2011_01

    It’s been awhile since I posted something here, and I figured I might use this spot to explain some ...

  5. PHP生成随机密码的4种方法及性能对比

    PHP生成随机密码的4种方法及性能对比 http://www.php100.com/html/it/biancheng/2015/0422/8926.html 来源:露兜博客   时间:2015-04 ...

  6. filter:Alpha总结

    filter:Alpha(Opacity=?, FinishOpacity=?, Style=?, StartX=?, StartY=?, FinishX=?, FinishY=?)Opacity:透 ...

  7. UltraEdit 标签(tab)不见的3个解决办法

    UltraEdit 标签(tab)不见的3个解决办法 2010-11-08 09:19 1042人阅读 评论(0) 收藏 举报 工具c 方法1:点 视图->视图/列表(V)->打开文件标签 ...

  8. pro5

    1.本次课学到的知识点 (1)循环结构的概念 在我们需要重复进行某个步骤是就需要运用到循环结构. (2)三种循环语句 for,while,do-while是三种常用的循环语句,其中while的适用范围 ...

  9. OC接收数据时毫秒转date时间最简略方法

    一般项目中接收后台的数据会收到毫秒格式的date,需要换算成正规日期格式,这时候我们的好朋友command + c 和 command + v就得出来帮忙了: 可以复制使用如下方法: + (NSStr ...

  10. HBase协处理器统计表数据量

    1.Java代码实现 import org.apache.hadoop.hbase.client.coprocessor.AggregationClient; import org.apache.ha ...