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

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: female read after Serializable:
username: Alexia
password: null
sex: male

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

首先加载类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. could not build module 'uikit'

    今天 新建一个SingleView-APP 无法运行程序,在 AppDelegate.h中 第一行代码处报错. #import <UIKit/UIKit.h> /Users/wjw/Des ...

  2. JavaScript系列:常用方法

    文本框输入实时验证身份证号 charAt(索引)<=>indexOf(字符) <!DOCTYPE html> <head> <meta charset=&qu ...

  3. Android基础知识

    一.四大组件 Activity(活动).Service(服务).BroadcastReceiver(广播器).Content Provider(内容提供器) 二.五大布局 LinearLayout(线 ...

  4. The P4 Language Specification v1.0.2 Parser

    <p4规范>解析器部分详解 p4解析器是根据有限状态机的思想来设计的. 解析器中解析的过程可以被一个解析图(parser graph)所表示,解析图中所表示的某一个状态(或者说,在P4语言 ...

  5. Alamofire数据请求

    let stringurl = "http://www.huiyunche.cn/kyleuat/banner/list" Alamofire.request(.GET,strin ...

  6. STM32全球唯一ID读取方法

    产品唯一的身份标识非常适合:● 用来作为序列号(例如USB字符序列号或者其他的终端应用)● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性.● 用来激 ...

  7. Fortran并行计算的一些例子

    以下例子来自https://computing.llnl.gov/tutorials/openMP/exercise.html网站 一.打印线程(Hello world) C************* ...

  8. android ListView详解继承ListActivity

    [转]http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 在android开发中ListView是比较常用的组件,它以列表的形式展 ...

  9. XPS to Blender 2.7x

    XPS to Blender 2.7x(Blender internal the easy way) Things we are gonna need are Blender 2.7x www.ble ...

  10. SQL代码创建表例子

    create table class ( code ) primary Key, name ) ); create table student ( code ) primary Key, name ) ...