public class Main {public static void main(String[] args) {((NULL)null).haha();}
}class NULL {public static void haha(){System.out.println("haha");}
}

结果:

haha

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

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

Exception in thread "main" java.lang.NullPointerException

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

public class Main {public static void main(String[] args) {System.out.println("-------main start-------");new HelloB();new HelloB();System.out.println("-------main end-------");}
}class HelloA {public HelloA() {System.out.println("HelloA");}{ System.out.println("I'm A class"); }{ System.out.println("I'm AAA class"); }static { System.out.println("static A"); }}class HelloB extends HelloA {public HelloB() {System.out.println("HelloB");}{ System.out.println("I'm B class"); }{ System.out.println("I'm BBB class"); }static { System.out.println("static B"); }
}

结果:

-------main start-------
static A
static B
I'm A class
I'm AAA class
HelloA
I'm B class
I'm BBB class
HelloB
I'm A class
I'm AAA class
HelloA
I'm B class
I'm BBB class
HelloB
-------main end-------

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

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

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

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

public class Main {public static void main(String[] args) {getValue();}public static void getValue() {char x = 'B';switch (x){case 'A': System.out.printf("A");case 'B': System.out.printf("B");case 'C': System.out.printf("C");default:  System.out.printf("D");}}
}

结果:

BCD

View Code

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

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

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

java 序列化

代码:

public class Main {public static void main(String[] args) {User user = new User();user.setUsername("Alexia");user.setPasswd("123456");user.sex="female";System.out.println("read before Serializable: ");System.out.println("username: " + user.getUsername());System.out.println("password: " + user.getPasswd());System.out.println("sex: " + user.sex);try {ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("C:/user.txt"));os.writeObject(user); // 将User对象写进文件
            os.flush();os.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {ObjectInputStream is = new ObjectInputStream(new FileInputStream("C:/user.txt"));user = (User) is.readObject(); // 从流中读取User的数据
            is.close();System.out.println("\nread after Serializable: ");System.out.println("username: " + user.getUsername());System.out.println("password: " + user.getPasswd());System.out.println("sex: " + user.sex);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}}
class Person {private String city="shanghai";public String sex="male";
}class User extends Person implements Serializable {private static final long serialVersionUID = 8294180014912103005L;private String username;private transient String passwd;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}
}

结果:

read before Serializable:
username: Alexia
password: 123456
sex: femaleread after Serializable:
username: Alexia
password: null
sex: male

View Code

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

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

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

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

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

public class Main {public static void main(String[] args) {System.out.println("X = " + A.X + ", Y = " + B.Y);//System.out.println("Y = " + B.Y + ", X = " + A.X);
    }
}class A {public static int X;static {X = B.Y + 1;}
}class B {public static int Y = A.X + 1;static {}
}

结果:

X = 2, Y = 1

View Code

首先加载类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 用程序代码解释继承_关于初级java程序员笔试题

    关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...

  2. proxy aspectj_使用AspectJ,Javassist和Java Proxy进行代码注入的实用介绍

    proxy aspectj 静态地或在运行时将代码片段注入已编译的类和方法中的功能可能会很有帮助. 这尤其适用于在没有源代码的第三方库中或在无法使用调试器或探查器的环境中对问题进行故障排除. 代码注入 ...

  3. 使用AspectJ,Javassist和Java Proxy进行代码注入的实用介绍

    静态地或在运行时将代码片段注入已编译的类和方法中的功能可能会很有帮助. 这尤其适用于在没有源代码的第三方库中或在无法使用调试器或探查器的环境中对问题进行故障排除. 代码注入对于处理涉及整个应用程序的问 ...

  4. 使用java数据结构编写代码

    使用java数据结构编写代码 数组数据结构 数组的初始化 public static void main(String[] args) {int[] arrays = new int[5]; // 定 ...

  5. Java面向对象与代码编写

    Java面向对象与代码编写 面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么, ...

  6. Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)

    Android开发人员不得不收集的代码(持续更新中) Blankj 关注 2016.07.31 04:22* 字数 370 阅读 102644评论 479喜欢 3033赞赏 14 utilcode D ...

  7. [干货]Android开发人员不得不收集的代码(不断更新)

    代码地址链接:[干货]Android开发人员不得不收集的代码 为方便查找,已进行大致归类,其目录如下所示: 尺寸相关→SizeUtils.java dp与px转换 dp2px.px2dp sp与px转 ...

  8. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

  9. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

最新文章

  1. Java 网关-Servlet Gateway
  2. SAP UI5 library-dbg.js - local location
  3. spring-boot 速成(8) 集成druid+mybatis
  4. mysql 授权访问_windows开启3306端口并用可视化工具访问远程mysql(授权访问)
  5. Java基础知识:Java实现Map集合二级联动4
  6. 学习Spring Boot:(十八)Spring Boot 中session共享
  7. 【Flutter】基础组件【07】Appbar
  8. JavaWeb在线商城系统(java+jsp+servlet+MySQL+jdbc+css+js+jQuery)
  9. 微信小程序SEO优化策略
  10. 北邮计算机自招,2019自主招生能报几所学校?深度解析90所自招院校限报!
  11. Android谷歌地图校正,在android中调整谷歌地图(api v2)缩放级别
  12. android 计算屏幕尺寸来区分phone和pad
  13. 跨平台API对接(Java)
  14. byte[]与ByteBuffer相互转化
  15. vue3 ts 使用 pinia
  16. Day68(贪心算法)
  17. 导师-学生问题_广义表
  18. 国密算法:利用python进行sm2非对称算法的实现,国密算法库gmssl的使用
  19. 谁在使用 MacBook?来聊聊苹果笔记本的用户群体
  20. HttpClient发送Https请求报 : unable to find valid certification path to requested target

热门文章

  1. webstorm更改scss输出路径
  2. docker 安装MongoDB以及设置用户
  3. ElasticSearch IK分词器安装
  4. 富士康裁员六万,试图用机器人扭转赤字?
  5. Spring(07)——单例注入多例之lookup-method
  6. MySQL5.7.10多元复制功能搭建
  7. C++关键字Volatile的作用
  8. JAVA 算法练习(二)
  9. ibatis查询SQL语句返回一个对象,此对象包含一个List属性
  10. 个人--变成星星的孩子