java中speak方法的意思_Java中的關鍵字
首先是訪問控制的關鍵字,分
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中的關鍵字相关推荐
- java中的方法在哪里_Java中的本机方法是什么,应在哪里使用?
小编典典 Java中的本机方法是什么,应在哪里使用? 一旦看到一个小例子,就很清楚了: Main.java : public class Main { public native int intMet ...
- JAVA中console方法怎么用_Java中Console对象实例代码
Java中Console对象实例代码 发布于 2020-12-20| 复制链接 摘记: 在JDK 6中新增了java.io.Console类,可以让您取得字节为基础的主控台装置,例如,您可以藉由Sys ...
- java 获取当前方法的名称_Java中获取当前函数名
有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松搞定. 一提到getStatckTrace多数人会联想到Thowable中的getStackT ...
- java中wait方法使用实例_java中wait、notify和notifyAll的概念用法和例子?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 新手不必过认真研究,我只列马克-to-win了一个国外的经典例子, 有兴趣的可研究这三个方法仅在synchronized 方法中才能被调用. wait() ...
- java native方法体在哪_java中native方法的使用
native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前文件,而是在用其他語言(如C和C++)實現的文件中.Java語言本身不能對操作系統底層進行訪問和操作,但是可以通過JNI接口 ...
- c语言中continue在case中,C語言switch case 語句中能否使用continue 關鍵字?
在C語言的學習中,我學習到switch case語句,我發現不能使用continue關鍵字. 代碼如下: #include int main() { int a; printf("input ...
- java sleep join_Java多線程之sleep,wait,join和yield關鍵字
在java或者android中,使用Thread和Runnable就可以玩多線程了,這個成本比較低,也沒什么好說的,今天主要是針對多線程中主要的關鍵字wait,sleep,join和yield做個筆記 ...
- java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...
[填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...
- Java中field的覆写_Java中方法的覆写
[套装4本]java编程思想4第4版+ 402.5元 包邮 (需用券) 去购买 > 一.方法的重写概念 之前说了子类如果继承了一个父类,那么子类就会拥有父类的方法(不包括构.造方法)和属性,此时 ...
最新文章
- 科技下的仓库,数据库
- python提供两个对象身份比较操作符什么和什么来测试_python - 第二部分
- 给妹子讲python-S01E19解析Python内嵌作用域与函数闭包
- Realm数据库使用
- linux脚本的数据输出到excel,使用shell实现Excel表格导出功能 | 剑花烟雨江南
- 给数组添加自定义方法
- NET问答: 枚举 和 常量 在使用时该怎么抉择?
- 法院才是最童叟无欺的一元店
- maven 单独构建多模块项目中的单个模块
- 丹麦为NSA开绿灯 通过通信中心监控欧洲政客
- Django自身安全机制-XSS和CSRF
- 通俗地讲解傅立叶分析和小波分析间的关系
- java十大排序法_Java 十大排序算法
- 用计算机进行几何证明属于,湖南省计算机二级精选选择题1
- 应用NMOS和晶体三极管作为基本开关管的相关知识
- C语言入门:数字分离
- 【问题解决】samba添加用户和密码时报错 Failed to add entry for user
- c#操作word图表(二)
- 【Python学习】——实现文本的朗读(pyttsx3)
- 工业交换机在高速道路隧道监控系统解决方案
热门文章
- 关于道路标志牌的标记和数字标记
- jira是干什么_如何用JIRA来做需求管理?
- sqlserver无法连接的localhost解决方案
- 万能表单php设计思路,在线自定义万能表单的设计思路
- 三星带着Bixby搅局中国市场,还说自己是「一家AI技术公司」
- 在PPT上使用开发工具的不同控件实现单选操作
- 转:让员工的信念跟上组织的发展
- Python3 中英文列表输出对齐
- Oracle database TSPITR(TableSpace Point-In-Time Recovery) 表空间基于时间点的恢复
- 小米手机如何在便签待办事项中输入语音?