`
王雨峰
  • 浏览: 9318 次
文章分类
社区版块
存档分类
最新评论

Java:static、final、transient作用,foreach循环的原理。

 
阅读更多
1、基本语法
这包括static、final、transient等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,因为能看出你非常热衷研究技术。 
让我印象深刻的一次面试经历,面试官直接问到了我volatile关键字的底层实现原理(顺便插一句,面试和被面试本身就是相对的,面试官能问这个问题同时也让面试者感觉到面试官也是一个喜爱研究技术的人,增加了面试者对公司的好感,我最终选择的就是问了这个问题的公司),不要觉得这太吹毛求疵了----越简单的问题越能看出一个人的水平,别人对你技术的考量绝大多数都是以深度优先、广度次之为标准的,切记。 

static关键字: 
1.修饰成员变量 
    在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员。加上static修饰的属性jvm分配在静态存储区,不加static属性jvm分配在堆区。 
2.修饰成员方法 
    使用时通过“类名.方法名”的方式就可以方便的使用了,相当于定义了一个全局的函数(只要导入该类所在的包即可)。不过它也有使用的局限,一个static修饰的类中,不能使用非static修饰的成员变量和方法,这很好理解,因为static修饰的方法是属于类的,如果去直接使用对象的成员变量,它会不知所措(不知该使用哪一个对象的属性)。 
3.静态块 
     一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 
比如main方法就必须是静态的 这是程序入口 
两者的区别就是:静态代码块是自动执行的; 
静态方法是被调用的时候才执行的. 
4.静态导包 
    静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。 

总结 
static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法: 

用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享; 
用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类; 
静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键; 
静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。 

final关键字是我们经常使用的关键字之一,它的用法有很多,但是并不是每一种用法都值得我们去广泛使用。它的主要用法有以下四种: 

1.用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值; 
2.用来修饰方法参数,表示在变量的生存期中它的值不能被改变; 
3.修饰方法,表示该方法无法被重写; 
4.修饰类,表示该类无法被继承。 
上面的四种方法中,第三种和第四种方法需要谨慎使用,因为在大多数情况下,如果是仅仅为了一点设计上的考虑,我们并不需要使用final来修饰方法和类。 

java中transient关键字作用: 
一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。但是有种情况是有些属性是不需要序列号的,所以就用到这个关键字。只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。 

foreach循环的原理。 
1、ArrayList之所以能使用foreach循环遍历,是因为ArrayList所有的List都是Collection的子接口,而Collection是Iterable的子接口,ArrayList的父类AbstractList正确地实现了Iterable接口的iterator方法。之前我自己写的ArrayList用foreach循环直接报空指针异常是因为我自己写的ArrayList并没有实现Iterable接口。 
2、任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确地实现Iterable接口,实际上,这种做法就是23中设计模式中的迭代器模式。 
3、对于数组,就是转化为对数组中的每一个元素的循环引用. 
分享到:
评论

相关推荐

    Java中的transient关键字.doc

    transient 关键字的作用是告知 Java virtual machine(JVM)在序列化对象时,不要包括被标记为 transient 的属性。这意味着,当一个对象被序列化时,被标记为 transient 的属性不会被写入到输出流中,从而减少了序列...

    说一说java关键字final和transient

    在Java编程语言中,`final` 和 `transient` 是两个非常重要的关键字,它们分别用于不同的场景。让我们深入了解这两个关键字的含义、用法以及在实际编程中的应用。 首先,我们来谈谈`final`关键字。`final` 可以用于...

    java关键字transient

    在Java编程语言中,`transient`是一个非常重要的关键字,它与对象持久化和序列化密切相关。当一个字段被声明为`transient`时,它表明该字段的值不会随着对象的序列化而保存。这通常用于那些不希望或者不需要在序列化...

    Java_transient关键字

    ### Java中的transient关键字详解 在Java编程语言中,`transient`关键字是一个非常重要的概念,主要用于对象序列化过程中对特定变量的控制。当一个类实现了`Serializable`接口时,其对象可以被序列化为一个持久化的...

    Java关键字transient

    在`KeyWordsTransientTest.java`这个文件中,可能包含了一个测试用例,用于演示`transient`关键字的工作原理。通常,这样的测试会创建一个可序列化的类,其中包含一个`transient`字段,并进行序列化和反序列化操作,...

    Java之transient关键字.Java

    在Java编程语言中,`transient`关键字是一个非常重要的特性,它用于标记对象的某个成员变量不应该被序列化。当你创建一个可序列化的类(通过实现`Serializable`接口)时,如果你不想某些字段在序列化过程中被保存或...

    Java面试小抄第一版 By 库森.pdf

    10. final、finally、finalize区别:final用于声明常量,finally用于异常处理,finalize为Object类方法用于垃圾回收前对象清理。 11. static关键字:用来创建类级别的变量和方法。 12. static的含义和覆盖问题:...

    Java transient关键字使用小记

    在Java编程语言中,`transient`关键字是一个非常重要的概念,它与对象的序列化过程紧密相关。序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以...

    Java关键字Transient与串行化

    在Java编程语言中,`transient`...理解`transient`的工作原理及其在序列化过程中的作用,对于任何进行Java开发的程序员来说都是至关重要的技能。通过合理使用`transient`关键字,可以显著提高应用程序的安全性和效率。

    transient Java语言的关键字

    transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)

    今天,我们将深入理解Java虚拟机-Java内存区域透彻分析,探讨序列化和反序列化的概念及其使用场景,实现序列化的方式,以及transient关键字的作用。 序列化和反序列化的概念 序列化是指将Java对象转换为二进制数据...

    Java transient关键字原理解析

    Java transient关键字原理解析 Java 中的 transient 关键字是一个重要的概念,它被用来表示变量将不被序列化处理。那么在理解 transient 关键字之前,我们先了解下什么是序列化。 序列化是对象进行持久化处理,也...

    Java技术:Java语言程序设计模拟题.pdf

    12. Java中的特殊关键字:如“transient”用于控制对象的序列化,而“synchronized”用于控制线程对共享资源的互斥访问。 13. Java的静态变量和静态方法:文档中给出了静态变量和静态方法的定义和使用方式,如...

    javax.persistence.jar

    在Java编程环境中,`javax.persistence.jar` 是一个非常重要的库,它是Java持久层API(Java Persistence API)的核心组件。Java持久层API,简称JPA,是Java开发人员用来管理关系数据库对象的一种标准接口。它提供了...

    排序算法原理与实现(java)编银行JAVA笔试题二编程资料程资料

    java语言中有许多关键字,例如public、private、final、static等。其中,null是java中的一个关键字,表示空引用。const、volatile和transient也是java中的关键字,但他们的作用域不同。 题目3:继承 java中的继承...

    java 序列化代码示例

    private static final long serialVersionUID = 1L; // 为类生成一个唯一的序列化ID ``` - **安全性**:序列化可能导致安全问题,因为恶意用户可能利用序列化漏洞攻击系统。谨慎处理来自不可信源的序列化数据。 ...

    JAVA笔试总结 -- 非常全面

    native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...

    Java序列化的机制和原理

    让我们深入探讨一下Java序列化的机制和原理。 首先,Java序列化的主要目的是为了对象的持久化和在网络上的传输。为了使一个对象可以被序列化,该对象的类必须实现`java.io.Serializable`接口。这个接口没有任何方法...

    JAVA学习笔记.pdf

    其中,修饰符可以是static、final、transient、volatile等,类型是变量的数据类型,变量名是变量的名称,初始值是变量的默认值。 成员变量的修饰符有四种:static、final、transient、volatile。static表示成员变量...

Global site tag (gtag.js) - Google Analytics