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

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、对于数组,就是转化为对数组中的每一个元素的循环引用. 
分享到:
评论

相关推荐

    java8集合源码分析-Outline:大纲

    foreach循环原理() volatile底层实现() equals和hashcode(, ) string,stringbuffer和stringbuilder(,,,, ) 伪泛型(, , ) 自动装箱(,) Try-with-resources() 序列化 反序列化(, , , ) interface 和 abstract class ...

    java技术指南

    文档内容分为多个章节,从Java的基本语法开始,详细介绍了关键字的使用,如static、final、transient、volatile、synchronized、import、enum等,这些关键字在Java程序中有着非常重要的作用。例如,static关键字可以...

    java精通程度应该会什么

    - **foreach循环**: 了解其内部原理,如使用迭代器进行遍历等。 #### 二、集合框架 集合是Java开发中不可或缺的一部分,对于集合框架的深入理解尤为重要。 - **List**: 包括`ArrayList`(基于数组实现)和`...

    Java装逼指南.pdf

    - **foreach**循环是Java为遍历数组和集合提供的一种简便方式,其底层通过调用迭代器(Iterator)实现。例如: ```java for (int i : array) { System.out.println(i); } ``` #### 3. Serializable - **...

    王者归来之JAVA2核心技术第1卷.基础知识7thJoin4.pdf

    在JDK5.0中引入了增强的for循环语句,也称为foreach循环,简化了数组或集合的遍历过程。在JDK1.4中,需要将增强的for循环转换为传统的for循环。 #### B.2 泛型数组列表 泛型是在JDK5.0中引入的一个特性,它允许在...

    Java进阶知识点汇总.pdf

    ##### foreach循环的原理 - **foreach循环**是一种简化版的for循环,主要用于遍历数组或集合。它的内部实现基于迭代器(Iterator),通过自动处理迭代逻辑来简化代码。 ##### Serializable - **实现序列化的步骤*...

    阿里资深技术专家:在各阶段中3年经验的java程序员应该具备哪些技术能力

    阿里资深技术专家认为,java程序员应该具备基本语法的知识,包括static、final、transient等关键字的作用,foreach循环的原理等等。对于基本语法的考查,阿里资深技术专家建议java程序员应该具备深入的理解和掌握。 ...

    AS3.0的关键字和保留字

    1. **each**:在foreach循环中使用,用于遍历集合中的元素。 2. **get**:用于声明getter方法。 3. **set**:用于声明setter方法。 4. **namespace**:用于定义命名空间。 5. **includes**:用于检查一个命名空间...

    Java源码解析LinkedList

    Java源码解析LinkedList Java源码解析LinkedList是Java集合框架中的一种重要数据结构。它是一种双向链表,具有高效的插入和删除操作。今天,我们将深入探讨LinkedList的源码,了解它的内部实现机制。 首先,让我们...

    spring_MVC源码

    16. private static final long serialVersionUID = 1L; 17. @Id 18. @Basic(optional = false) 19. @GeneratedValue(strategy = GenerationType.IDENTITY) 20. @Column(name = "id", nullable = false) 21. ...

Global site tag (gtag.js) - Google Analytics