博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java关键字final,static使用总结
阅读量:7067 次
发布时间:2019-06-28

本文共 3677 字,大约阅读时间需要 12 分钟。

hot3.png

Java关键字final,static使用总结

一,final

在Java中,final关键字是”这是无法改变的”和”终态的“含义,它可以修饰非抽象类,非抽象类成员方法和变量。

        1,final类不能被继承,没有子类,类中方法是final的(太监类)。

        2,final方法不能被子类覆写,但可以被继承。

        3,final成员变量表示常量。只能被赋值一次,赋值后值不能改变。

        4,final不能用于修饰构造方法。

        注意:父类中的private成员方法是不能被子类方法覆写的,也不能不被继承。所以private成员方法默认是final类型的。

1,final类

        final类是不能被继承的,因此final类的成员方法不能被覆写,默认都是final的。在设计类的时候,如果这个类不需要有子类,类的实现细节不能被改变,并且这个类不会再被扩展,那就设计成final类。

2,final方法

        如果一个类不需要子类覆写其方法,则将方法定义成final类型方法。

        使用final方法的原因:

        (1)把方法锁定,组织任何继承类改变它的意义和实现。

        (2)高效,在遇到final方法的时候,会转入内嵌机制,大大提高效率。

package org.panda.Final;class Test1							//创建类{	public void f1()				//新建方法	{		System.out.println("f1") ;	}	public final void f2()			//新建final方法,不能被覆写,但可以被继承	{		System.out.println("f2") ;	}	public void f3()	{		System.out.println("f3");	}	private void f4()	{		System.out.println("f4");	}}public class FinalDemo01 extends Test1{	public void f1()				//覆写父类中一般方法	{		System.out.println("父类中一般方法被覆写");	}	public void f3()	{		System.out.println("f3");	}		public static void main(String[] args)	{		FinalDemo01 f = new FinalDemo01() ;//声明并实例化子类对象		f.f1() ;							//因为子类覆写父类方法,所以调用子类中方法		f.f2() ;							//调用从父类中继承的final方法		f.f3() ;							//调用从父类中继承的方法							//f.f4() ;							//调用失败,无法从父类中继承获得。	}}

 

3,final变量(常量)

        用final修饰的成员变量表示常量,值一旦改变不能更改变。修饰的变量要被初始化。

          final修饰的变量有三种,静态变量,实例变量和局部变量。分别表示三种类型的常量。

二,static关键字

         static表示“全局”或“静态”的意思。用来修饰成员变量和成员方法。也可以形成static静态代码块。在Java语言中没有全局变量的概念。

         static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接使用类名来访问。

         类名.静态变量名

         类名.静态方法名(参数类型,参数列表)

        用static修饰的代码块称为静态代码块,当JVM加载类时,就会执行该代码块。

1,static变量

        一种是被static修饰的变量,叫静态变量或类变量;另一中没有被static修饰的变量,叫实例变量。

2,static方法

      静态方法可以直接通过类名直接调用,任何的实例都可以调用。因此在静态方法中不能使用this和super关键字。不能直接访问所属类的实例变量和变量方法(就是不带static的的成员变量和成员方法),只能访问所属类的静态成员变量和成员方法。

三,static 和 final一起用表示什么?

         static final用来修饰成员变量和成员方法,可以简单理解为“全局常量”。

         对于变量,表示一旦给值就不能修改。并且可以通过类名直接调用。

         对于方法,表示不可覆盖,可以通过类名直接访问。

package org.panda.Final;import java.util.ArrayList;public class StaticFinalDemo01 {	private static final String strStaticFinalVar = "IronMan" ;	//定义属性用static final修饰	private static String strStaticVar = "null" ;				//定义属性用static修饰	private final String strFinalVar = "null" ;					//定义属性用final修饰	private static final int intStaticFinalVar = 0 ;		//定义int属性用static final修饰	private static final Integer integerStaticFinalVar = new Integer(8) ;				//定义容器	private static final ArrayList
alStaticFinalVar = new ArrayList
() ; //定义容器 private void test() { System.out.println("--------------值处理前-------------"); System.out.println("strStaticFinalVar:"+strStaticFinalVar); System.out.println("strStaticVar:"+strStaticVar); System.out.println("strFinalVar:"+strFinalVar); System.out.println("intStaticFinalVar:"+intStaticFinalVar); System.out.println("integerStaticFinalVar:"+integerStaticFinalVar); System.out.println("alStaticFinalVar:"+alStaticFinalVar); //strStaticFinalVar = "Hulk" ; //错误,final表示终态,不能被改变 strStaticVar = "Hello World" ; //正确,static表示类变量,值可以改变 //strFinalVar = "ByeBye World" ; //错误,final表示终态,不能被改变 //intStaticFinalVar = 1 ; //错误,final表示终态,不能被改变 //integerStaticFinalVar = new Integer(8) ; //错误,final表示终态,不能被改变 alStaticFinalVar.add("aaa") ; //正确,容器变量本身没有变化,但存放内容发生变化 System.out.println("--------------值处理后-------------"); System.out.println("strStaticFinalVar:"+strStaticFinalVar); System.out.println("strStaticVar:"+strStaticVar); System.out.println("strFinalVar:"+strFinalVar); System.out.println("intStaticFinalVar:"+intStaticFinalVar); System.out.println("integerStaticFinalVar:"+integerStaticFinalVar); System.out.println("alStaticFinalVar:"+alStaticFinalVar); } public static void main(String[] args) { new StaticFinalDemo01().test() ; }}

转载于:https://my.oschina.net/bugkiller/blog/598594

你可能感兴趣的文章
python-管理MySQL之ConfigParser模块
查看>>
struts2学生信息管理系统篇章②进度报告篇章
查看>>
Factom(公证通)--基于区块链的存证系统
查看>>
WAP端 穿透问题和解决方法
查看>>
修正使用ClickOnce升级程序遇到HRESULT: 0x800736B3问题
查看>>
LeetCode – Refresh – Count and Say
查看>>
Android Studio的使用(九)--设置IDE编码格式
查看>>
利用表格分页显示数据的js组件datatable的使用
查看>>
p_large_BdpS_4af60000080d5c3f.jpg
查看>>
区块链开发_以太坊测试功能
查看>>
mac 安装secureCRT
查看>>
服务器错误代码表示含义
查看>>
《React-Native系列》3、RN与native交互之Callback、Promise
查看>>
jQuery EasyUI
查看>>
[经验转帖]在豆瓣上直接下载你喜欢的书
查看>>
raw_input功能
查看>>
Setup best practices for Agile Scrum in your organization
查看>>
选择排序的一种递归写法
查看>>
Python3 day6面向对象
查看>>
查看Oracle耗时Sql
查看>>