Java关键字之static、final、transient
2016-08-23 21:50
357 查看
Java关键字之static、final、transient
static关键字
static关键字,通常用来修饰变量和方法以及静态代码块。被修饰的变量表示为类所有对象所共有的,被修饰的方法表示类的方法。 掌握好static关键字很重要一点就是,static的作用域是类而非某个具体对象。
举例
静态属性和静态方法/** * @author xuyi * @Time 2016年8月23日 下午9:28:39 * @类名 StaticDemo * @功能描述:表示访问次数的类 * @春风十里不如你 * @备注: */ public class StaticDemo { // 表示访问次数 private static int count; // 每访问一次就加1 public static int incr() { return ++count; } } //static还有时常喝final一起组合使用,static final 备注:static修饰的方法通常是public的
静态代码块
Person/** * @author xuyi * @Time 2016年8月23日 下午9:36:26 * @类名 Person * @功能描述:演示静态代码块 * @春风十里不如你 * @备注: */ public class Person { // 静态代码块 static { System.out.println("hello static block"); } private String name; public void setName(String name) { this.name = name; } }
MainApp
public class PersonApp { public static void main(String[] args) { new Person("xuyi"); new Person("xuyi"); new Person("xuyi"); new Person("xuyi"); new Person("xuyi"); // hello static block // 构造方法... // 构造方法... // 构造方法... // 构造方法... // 构造方法... } } //由结果可知,static代码块是在类加载到内存时执行的。
final关键字
final关键字意思就是表示不可变,理解不可变这一点就很容易掌握final关键字的使用了。
举例
public class FinalDemo { // 定义性别为final,是无法修改的 private final String sex = "woman"; public void changeAge(final String sex) { this.sex = sex;//编译不通过 } } 备注:说到final关键字,还有一个finally关键字,finally关键字通常是一段代码块,和try... 一起使用
transient关键字
transient关键字在日常开发中并没有像前面两个关键字用的那么频繁,在很少场合下使用。 transient表示瞬态、临时的,其不能序列化到文件中。
举例
User类/**
* User实现Serializable接口
*
* @author xuyi
* @Time 2016年8月23日 下午9:02:46
* @类名 User
* @功能描述:
* @春风十里不如你
* @备注:
*/
public class User implements Serializable
{
private static final long serialVersionUID = -6719650258400731058L; private String name; private transient String password; //setter 和 getter方法 @Override public String toString() { return "User [name=" + name + ", password=" + password + "]"; } } //通常如果想要将一个对象持久化存储到磁盘中,那么通常是先将该对象序列化然后再存储。
MainApp
public class MainApp { public static void main(String[] args) throws Exception { File file = new File("e:/out.txt"); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)); User user = new User(); user.setName("xuyi"); user.setPassword("admin"); out.writeObject(user); out.flush(); out.close(); ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); User outUser = (User) in.readObject(); in.close(); System.out.println(outUser.toString()); // 如果使用transient 修饰password,结果就是 // User [name=xuyi, password=null] // 如果没有使用transient 修饰password,结果就是 // User [name=xuyi, password=admin] } }
总结
transient的作用就是阻止它所修饰的属性被序列化,瞬态的意思。 比如: 网络上传输一些客户的资料,但是对于非常敏感的数据(比如薪资,各类密码之类的)我们担心在传输过程中这些敏感数据被窃取
既然说到序列化,那就顺便提一下,如果一个变量是static的,那么无论是否有transient修饰词,都不能够别序列化, 因为序列化是序列化一个对象,static变量根本不属于任何对象
在Java中想让对象实现序列化,可以通过两种方式 1、实现Serializable接口,这种情况下,对象的序列化和反序列化都是java自己的机制自动实现的,不需要人为实现; 2、实现Externalizable接口,可以实现writeExternal()和readExternal()这两个方法,完成自己的序列化/反序列化操作; 备注:方式1比较常用,也比较简单。
参考
1、http://qifuguang.me/2016/06/24/Java-transient%E5%85%B3%E9%94%AE%E5%AD%97%E8%A7%A3%E6%9E%90/相关文章推荐
- java中 static,final,transient,volatile关键字的作用
- java学习(1).static,volatile,transient,final等关键字
- 总结java中static、final、transient关键字的作用
- java中 static,final,transient,volatile关键字的作用
- java学习(2).static,`volatile`,transient,final等关键字
- Java关键字final、static使用总结
- Java关键字final、static使用
- Java关键字final、static使用总结
- Java关键字final、static使用总结<转>
- java中的final,static关键字
- Java关键字final、static使用总结关键字
- Java关键字final、static使用总结
- java 关键字final 和 static
- Java关键字final、static使用总结
- Java关键字final、static使用总结
- Java关键字final、static使用总结
- Java关键字final、static,抽象类,接口使用总结
- Java关键字final、static使用总结
- Java关键字final、static使用总结
- java 编程思想笔记之static 和 final 关键字