国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java中有哪些修飾符關(guān)鍵詞

發(fā)布時(shí)間:2021-07-04 20:13 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 開(kāi)發(fā)技術(shù)

這篇文章給大家介紹Java中有哪些修飾符關(guān)鍵詞,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Java修飾符是你添加到變量、類(lèi)和方法以改變其含義的關(guān)鍵詞。它們可分為兩組:

  1. 訪(fǎng)問(wèn)控制修飾符

  2. 非訪(fǎng)問(wèn)修飾符

讓我們先來(lái)看看訪(fǎng)問(wèn)控制修飾符,以及如何使用它們的一些代碼示例。

那么如何使用這三種訪(fǎng)問(wèn)控制修飾符呢?請看下面兩個(gè)類(lèi)。請忽略此處代碼的低效,因為這是教程。

創(chuàng )建一個(gè)名為project/mypackage/Person.java文件,并添加以下代碼:

package mypackage; class Person {     private String firstname;     private String lastname;     protected void setFirstname(String firstname) {         this.firstname = firstname;     }     protected void setLastname(String lastname) {         this.lastname = lastname;     }     protected String getFirstname() {         return this.firstname;     }     protected String getLastname() {         return this.lastname;     } }

上面的Person類(lèi)有private變量和protected方法。這意味著(zhù)這些變量將只能從類(lèi)訪(fǎng)問(wèn),方法將只能從mypackage包訪(fǎng)問(wèn)。

接下來(lái)創(chuàng )建一個(gè)名為project/mypackage/Company.java的文件,并添加以下代碼:

package mypackage; import java.util.*; public class Company {     private ArrayList<Person> people;     public Company() {         this.people = new ArrayList<Person>();     }     public void addPerson(String firstname, String lastname) {         Person p = new Person();         p.setFirstname(firstname);         p.setLastname(lastname);         this.people.add(p);     }     public void printPeople() {         for(int i = 0; i < this.people.size(); i++) {             System.out.println(this.people.get(i).getFirstname() + " " + this.people.get(i).getLastname());         }     } }

上面的類(lèi)是公共的,因此它可以從包內部和外部的任何類(lèi)進(jìn)行訪(fǎng)問(wèn)。它有一個(gè)只能在類(lèi)內訪(fǎng)問(wèn)的私有變量,以及一堆的公共方法。由于Person類(lèi)和Company類(lèi)共享相同的包,所以Company類(lèi)可以訪(fǎng)問(wèn)Person類(lèi)以及所有它的方法。

為了完成訪(fǎng)問(wèn)控制修飾符的示范,讓我們在一個(gè)新的project/MainDriver.java文件中創(chuàng )建一個(gè)驅動(dòng)程序類(lèi):

import mypackage.*; public class MainDriver {     public static void main(String[] args) {         Company c = new Company();         c.addPerson("Nic", "Raboy");         c.printPeople();         Person p = new Person();         p.setFirstname("Maria");         p.setLastname("Campos");     } }

請記住,由于Company類(lèi)是公共的,所以我們在添加和打印人的時(shí)候沒(méi)有問(wèn)題。然而,由于Person類(lèi)是受保護的,所以我們會(huì )得到一個(gè)編譯時(shí)錯誤,因為MainDriver不是mypackage包的一部分。

現在,讓我們來(lái)看看現有的非訪(fǎng)問(wèn)修飾符,以及如何使用它們的一些示例代碼。

那么如何使用這五個(gè)非訪(fǎng)問(wèn)修飾符呢?

Java中static修飾符的一個(gè)很好的例子就是:

int max = Integer.MAX_VALUE
int numeric = Integer.parseInt("1234");

在上面的例子中,請注意我們利用了Integer類(lèi)中變量和方法,而不是先實(shí)例化。這是因為那些特定的方法和變量都是靜態(tài)的。

abstract修飾符則略有不同。你可以創(chuàng )建一個(gè)帶方法的類(lèi),但它們基本只能定義。你不能對它們添加邏輯。例如:

abstract class Shape {     abstract int getArea(int width, int height); }

然后在子類(lèi)里,你才可以增加例如下面這樣的代碼:

class Rectangle extends Shape {     int getArea(int width, int height) {         return width * height;     } }

下面要講講synchronizedvolatile修飾符。

先來(lái)看一個(gè)線(xiàn)程的例子,在這個(gè)例子里我們將從兩個(gè)不同的線(xiàn)程去訪(fǎng)問(wèn)相同的方法:

import java.lang.*; public class ThreadExample {     public static void main(String[] args) {         Thread thread1 = new Thread(new Runnable() {             public void run() {                 print("THREAD 1");             }         });         Thread thread2 = new Thread(new Runnable() {             public void run() {                 print("THREAD 2");             }         });         thread1.start();         thread2.start();     }     public static void print(String s) {         for(int i = 0; i < 5; i++) {             System.out.println(s + ": " + i);         }     } }

運行上述代碼將輸出打印一個(gè)隨機的順序??赡苁沁B續的,也可能不連續,取決于CPU。然而,如果我們使用synchronized修飾符,那么***個(gè)線(xiàn)程必須在第二個(gè)線(xiàn)程開(kāi)始打印之前完成。print(String s)方法可以是這樣的:

public static synchronized void print(String s) {     for(int i = 0; i < 5; i++) {         System.out.println(s + ": " + i);     } }

接下來(lái),讓我們看看使用volatile 修飾符的例子:

import java.lang.*; public class ThreadExample {     public static volatile boolean isActive;     public static void main(String[] args) {         isActive = true;         Thread thread1 = new Thread(new Runnable() {             public void run() {                 while(true) {                     if(isActive) {                         System.out.println("THREAD 1");                         isActive = false;                     }                 }             }         });         Thread thread2 = new Thread(new Runnable() {             public void run() {                 while(true) {                     if(!isActive) {                         System.out.println("THREAD 2");                         try {                             Thread.sleep(100);                         } catch (Exception e) {                         }                         isActive = true;                     }                 }             }         });         thread1.start();         thread2.start();     } }

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

成熟女人牲交片免费| 欧美午夜成人片在线观看| 337P日本欧洲亚洲大胆色噜噜| YYY6080韩国三级理论| 亚洲国产精品久久久久秋霞1| 国语自产拍在线观看2019|