- 浏览: 327094 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
longge424:
你好,可否将saml与spring security结合使用的 ...
SAML介绍 -
bnmnba:
mark
(转)Ant 学习笔记(一) -
redhacker:
写的还不错!谢谢!
SAML介绍 -
linluxian:
SAML介绍 -
hyj1254:
有效,good.
Linux创建目录与删除目录命令具体分析
一、final
根据程序上下文环境,Java关键字final有“无法改变”或者“终态”的含义,它可以修饰非抽象类、非抽象类成员方法和变量。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
1、final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。 这种类通常我们称为完美类。
2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
例如:
public class Test1 {
public static void main(String[] args) {
}
public void f1() {
System.out.println(" f1 ");
}
//无法被子类覆盖的方法
public final void f2() {
System.out.println("f2");
}
public void f3() {
System.out.println("f3"); }
private void f4() {
System.out.println(" f4 ");
}
}
public class Test2 extends Test1 {
public void f1(){
System.out.println( " Test1父类方法f1被覆盖!" );
}
public static void
main(String[] args) {
Test2 t = new Test2();
t.f1();
t.f2();
//调用从父类继承过来的final方法
t.f3();
//调用从父类继承过来的方法
//t.f4();
//调用失败,无法从父类继承获得
}
}
3、final变量(常量)
用final修饰的成员变量表示常量,值一旦给定就无法改变!
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
一旦给final变量初值后,值就不能再改变了。
另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为空白final,无论什么情况,编译器都确保空白final在使用之前必须被初 始化。但是,空白final在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同, 却有保持其恒定不变的特征。
4、final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
public class
Test1 {
public static void main(String[] args) {
new Test1().f1(1); }
public void
f1( final int i)
{
//i++; i是final类型的,值不允许改变的.
System.out.print(i);
}
}
二、static
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代块,但是Java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,JVM 就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。大家可以从内存开辟来理解,static定义变量在内存中开辟空间只有一个。所以所有针对这个变量的调用都引用的是同一个地址的值。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(也可以在非静态成员方法中使用 ),但是不能在其他类中通过类名来直接引用。实际上private是访问权限限定,static表示不需要实例化就可以使用。
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
类名.静态方法名(参数列表...)
类名.静态变量名
用static修饰的代码块表示静态代码块,当JVM加载类时,就会优先执行该代码块。
1、static变量
一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问。
对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法,只能访问所属类的静态成员变量和成员方法。原因是实例是与实际的对象相关联的。
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3、static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
利用静态代码块可以对一些static变量进行赋值,大家可以看看static的main方法,JVM在运行main方法的时候可以直接调用而不用创建实例。
4、static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
发表评论
-
maven+springMVC+mybatis+junit详细搭建过程(转)
2015-06-01 09:46 3522目录[-] springMVC+mybatis框 ... -
linux awk的使用详解(收藏)
2014-09-03 16:04 681简介 awk是一个强大的文本分析工具,相对于grep的查 ... -
JSP中文乱码的产生原因及解决方案-转
2013-05-15 17:33 2358JSP中文乱码的产生原因及解决方案在JSP的开发过程中,经常 ... -
SAML介绍
2013-03-25 21:03 4398工作了一段时间,接触到不少知识,好久没有进行总 ... -
linux下通过JNI用C/C++中调用JAVA类
2012-07-20 16:15 1742最近工作中完成 ... -
逆向工程中的问题:Hibernate project not selected 解决方式(转)
2012-03-14 10:43 2153今天用myeclipse自动生成POJO类时一直找不到java ... -
责任链模式(转)
2011-11-22 21:38 1066责任链模式是一种对象的行为模式。 在责任链模 ... -
Java序列化与反序列化
2011-11-08 23:38 505基本概念:序列化是将对象状态转换为可保持或传输的格式的过程。与 ... -
java动态代理--JDK
2011-10-30 18:04 906JAVA的动态代理 代理模式 代理模式是常用的java ... -
Hibernate的merge与update方法的区别
2011-09-20 22:47 949今天做了个测试,写了个测试用例来看看merge与update时 ... -
Hibernate学习:Transient、Persistent、Detached三个状态
2011-09-19 22:15 1412Transient、Persistent、Detached是H ... -
sping源码分析之properties操作(转载) .
2011-09-15 14:36 1150目前在开发的过程中遇到:通过spring在后台对前台 ... -
Annotation 介绍
2011-07-07 10:29 1187从JDK5开始提供名为Annotation(注释)的功能,它被 ... -
java子类对象的初始化过程(转)
2010-12-13 10:28 1032具体的顺序如下: ... -
策略模式学习
2010-12-09 22:27 964一个策略模式的加减乘除: 抽象策略角色: (精囊妙计) ... -
代理模式学习
2010-12-09 22:22 826代理模式所涉及的角色有: 抽象主题角色:声明了真实主题 ... -
关于内部类的总结(转)
2010-11-17 14:56 843内部类: 1,概述内部类是指在一个外部类的内部再定义一个 ... -
关于abstrat类的一些问题总结
2010-11-16 23:10 1133最近遇到了一些关于抽 ... -
Java NIO与IO的区别和比较(转)
2010-11-14 20:05 1534导读J2SE1.4以上版本中发布了全新的I/O类库 ... -
关于socket中的长连接与短连接
2010-11-14 19:41 42721.长连接 Client方与Server方先建立通讯连接,连接 ...
相关推荐
Java 菜鸟必备 详细总结了键字final、static的使用 和限制
java 关键字final和static
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
面向对象部分让人搞晕的几个关键字,我这里专门针对这几个关键字进行了整理相关的面试题,只要你能做对80%,就证明你面向对象基本学懂了
本文主要给大家谈谈小编对java关键字final和static的理解,本文给大家介绍的较详细,需要的朋友参考参考下
主要介绍了java多线程关键字final和static详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java编程中static和final关键字的陷阱.pdf
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
主要介绍了详解Java编程中static关键字和final关键字的使用,是Java入门学习中的基础知识,需要的朋友可以参考下
总结了Java学习中的52个关键字(包括一些总结),如果觉得自己Java基础知识需要总结一下的,可以下载下来瞧瞧 1.final数据: 1>对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。一个既是static有...
Java 1.8对接口有两个方面的增强:接口中可以添加使用default或者static修饰的方法 增加default方法:又叫做接口扩展方法,即在不破坏java现有实现架构的情况下能往接口里增加新方法, default关键字可以给接口添加...
B类继承A类,相当于对A类的功能进行扩展,如果不希望对A类进行扩展,可以给A类加final关键字,这样的话,A类就无法继承了。 源代码中String就是没有子孙的 结论:final修饰的类无法被继承 二、final修饰的方法 ...
主要介绍了Java中static关键字的作用和用法详细介绍,主要讲了静态方法、静态变量、静态类、static和final一块用等内容。需要的朋友可以参考下
在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记的方法不能被子类复写; (3).final标记的变量即成为常量,只能被赋值一次. 注意: 如果使用final来...
通常,这类常量数据都是基本类型的数据,并赋予关键字final,同时在对此常量定义时需要进行赋值。 值得注意的是:对于基本类型,使用final关键字将使数值恒定不变;而对于对象引用,final则是使引用恒定不变。...
第二十二天,对抽象类,static关键字以及final关键字的学习
主要介绍了Java final static abstract关键字的相关资料,需要的朋友可以参考下
static、this、super、final的JAVA用法