首先是訪問控制的關鍵字,分

public、protected、default、private四種,權限如下:

(權限)      public      protected     default     private

同一類中      ok            ok           ok          ok

同一包中      ok            ok           ok

子類中        ok            ok

不同包中      ok

public的權限是最大的,private權限最小

下面是一些常用的關鍵字:

一、final

(一)final修飾的屬性

被final修飾的屬性表示此變量為常量,

一旦賦值則不能被改變,

如下面類中的CONSTANT:

class Person{

public final int CONSTANT;

public Person()

{

CONSTANT = 8;

//CONSTANT = 9;//編譯器報錯,final類型CONSTANT已被初始化,不能被修改

}

}

當然也可以在這個常量聲明的時候就給它賦值,這樣在其他地方就不能再修改了。

雖然final修飾的變量不能被修改,但依然可以被繼承並使用,只不過同樣地不能在子類中修改此常量。

下面用一個子類繼承上面的Person類:

class Student extends Person{

public Student()

{

//CONSTANT++; //錯誤,不能修改常量

System.out.println(CONSTANT); //正確,可以在子類中使用此常量

}

}

另外因為常量的特殊性,所以在創建常量時一般用全大寫,如上面的CONSTANT,以區分和常量和一般變量。

(二)final修飾的方法

被加final關鍵字的方法或屬性是不能被繼承的類修改的。將方法聲明為final,那就說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴展,並且也不允許任何從此類繼承的類來覆寫這個方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。

如有一個Person類:

class Person{

public final void speak()

{

System.out.println("我是父類");

}

}

這個Person類有一個final修飾的方法speak(),然后我們讓另一個類Student繼承它:

class Student extends Person{

//public void speak()

//{

//System.out.println("我是學生");

//}

// 編譯器報錯,不能重寫此方法。

public static void main(String[] args) {

new Student().speak();

}

}

可以發現,如果在Student里面重寫speak()方法編譯器會報錯,這是因為在Person里面已經將speak()定義為final類型了,而另一方面,雖然不能在Student里面重寫此方法,但從主函數里可以看到依然可以在Student里面調用speak()方法,這說明speak()方法依舊能被繼承,只不過不可被重寫。

二、static

static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊。被static修飾的成員變量和成員方法獨立於該類的任何對象。

(一)被static修飾的成員變量

如下,當一個變量被聲明為static時,在其他類中要引用此變量時,可以不用創建一個特定的對象,而是可以直接通過類名來調用:

class Person{

public static String s = "ddd";

}

class Student{

public Student()

{

System.out.println(new Person().s);

}

}

當然也可以通過創建對象來調用此靜態變量,但是因為被static修飾的成員變量獨立於該類的任何對象這種特殊性,如果某一個對象修改了這個靜態變量,則會永久修改這個變量值直到另一個對象再次修改,代碼如下:

class Person{

private static String name;

public Person(String name)

{

this.name = name;

}

public void speak()

{

System.out.println(name+" is speaking");

}

public static void main(String[] args) {

Person p1 = new Person("小名");

Person p2 = new Person("小芳");

p1.speak();

p2.speak();

}

}

如果name這個屬性不是static的,結果顯而易見應該是小名 is speaking和小芳 is speaking,但是當name有static修飾的時候,運行結果反而是:

小芳 is speaking

小芳 is speaking

這是因為當創建第一個對象時,我們賦給了name一個值“小名”,然后再創建另一個對象賦值給name另一個值“小芳”,應該注意到這兩個name實際上是一個name,修改之后這個類的所有對象共享的name就是“小芳”了,所以后面無論用哪個對象去調用name,結果都是“小芳”。

(二)被static修飾的方法

在static修飾的方法中只能引用本類的靜態成員變量

class Person{

private static String name;

private String sex;

public static void speak()

{

System.out.println(name);

//System.out.println(sex); //錯誤,應在name前聲明static

}

}

當然靜態成員變量可以在非靜態方法內使用。而且在靜態方法中,可以引用其他類的非靜態常量。另外需要注意的是在靜態方法中就不能使用this了,因為此方法無需創建對象。

(三)靜態域

靜態域也叫靜態代碼塊,是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM加載類時會執行這些靜態的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現的先后順序依次執行它們,每個代碼塊只會被執行一次。

值得注意的是靜態方法塊執行先於構造方法,如下:

public class Person{

static{

System.out.println("前靜態代碼塊");

}

public Person()

{

System.out.println("構造方法");

}

static{

System.out.println("后靜態代碼塊");

}

public static void main(String[] args)

{

new Person();

}

}

運行結果為:

前靜態代碼塊

后靜態代碼塊

構造方法

在接口中聲明成員變量時往往會同時用到final和static,這是因為接口應要標准化,內容不能被隨意更改。

java中speak方法的意思_Java中的關鍵字相关推荐

  1. java中的方法在哪里_Java中的本机方法是什么,应在哪里使用?

    小编典典 Java中的本机方法是什么,应在哪里使用? 一旦看到一个小例子,就很清楚了: Main.java : public class Main { public native int intMet ...

  2. JAVA中console方法怎么用_Java中Console对象实例代码

    Java中Console对象实例代码 发布于 2020-12-20| 复制链接 摘记: 在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由Sys ...

  3. java 获取当前方法的名称_Java中获取当前函数名

    有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松搞定. 一提到getStatckTrace多数人会联想到Thowable中的getStackT ...

  4. java中wait方法使用实例_java中wait、notify和notifyAll的概念用法和例子?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 新手不必过认真研究,我只列马克-to-win了一个国外的经典例子, 有兴趣的可研究这三个方法仅在synchronized 方法中才能被调用. wait() ...

  5. java native方法体在哪_java中native方法的使用

    native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前文件,而是在用其他語言(如C和C++)實現的文件中.Java語言本身不能對操作系統底層進行訪問和操作,但是可以通過JNI接口 ...

  6. c语言中continue在case中,C語言switch case 語句中能否使用continue 關鍵字?

    在C語言的學習中,我學習到switch case語句,我發現不能使用continue關鍵字. 代碼如下: #include int main() { int a; printf("input ...

  7. java sleep join_Java多線程之sleep,wait,join和yield關鍵字

    在java或者android中,使用Thread和Runnable就可以玩多線程了,這個成本比較低,也沒什么好說的,今天主要是針對多線程中主要的關鍵字wait,sleep,join和yield做個筆記 ...

  8. java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...

    [填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...

  9. Java中field的覆写_Java中方法的覆写

    [套装4本]java编程思想4第4版+ 402.5元 包邮 (需用券) 去购买 > 一.方法的重写概念 之前说了子类如果继承了一个父类,那么子类就会拥有父类的方法(不包括构.造方法)和属性,此时 ...

最新文章

  1. 科技下的仓库,数据库
  2. python提供两个对象身份比较操作符什么和什么来测试_python - 第二部分
  3. 给妹子讲python-S01E19解析Python内嵌作用域与函数闭包
  4. Realm数据库使用
  5. linux脚本的数据输出到excel,使用shell实现Excel表格导出功能 | 剑花烟雨江南
  6. 给数组添加自定义方法
  7. NET问答: 枚举 和 常量 在使用时该怎么抉择?
  8. 法院才是最童叟无欺的一元店
  9. maven 单独构建多模块项目中的单个模块
  10. 丹麦为NSA开绿灯 通过通信中心监控欧洲政客
  11. Django自身安全机制-XSS和CSRF
  12. 通俗地讲解傅立叶分析和小波分析间的关系
  13. java十大排序法_Java 十大排序算法
  14. 用计算机进行几何证明属于,湖南省计算机二级精选选择题1
  15. 应用NMOS和晶体三极管作为基本开关管的相关知识
  16. C语言入门:数字分离
  17. 【问题解决】samba添加用户和密码时报错 Failed to add entry for user
  18. c#操作word图表(二)
  19. 【Python学习】——实现文本的朗读(pyttsx3)
  20. 工业交换机在高速道路隧道监控系统解决方案

热门文章

  1. 关于道路标志牌的标记和数字标记
  2. jira是干什么_如何用JIRA来做需求管理?
  3. sqlserver无法连接的localhost解决方案
  4. 万能表单php设计思路,在线自定义万能表单的设计思路
  5. 三星带着Bixby搅局中国市场,还说自己是「一家AI技术公司」
  6. 在PPT上使用开发工具的不同控件实现单选操作
  7. 转:让员工的信念跟上组织的发展
  8. Python3 中英文列表输出对齐
  9. Oracle database TSPITR(TableSpace Point-In-Time Recovery) 表空间基于时间点的恢复
  10. 小米手机如何在便签待办事项中输入语音?