1. 程式人生 > 其它 >包的宣告與訪問、訪問修飾符、程式碼塊

包的宣告與訪問、訪問修飾符、程式碼塊

1.1     包的概念

java的包,其實就是我們電腦系統中的資料夾,包裡存放的是類檔案。

當類檔案很多的時候,通常我們會採用多個包進行存放管理他們,這種方式稱為分包管理。

在專案中,我們將相同功能的類放到一個包中,方便管理。並且日常專案的分工也是以包作為邊界。

類中宣告的包必須與實際class檔案所在的資料夾情況相一致,即類宣告在a包下,則生成的.class檔案必須在a資料夾下,否則,程式執行時會找不到類。

1.2     包的宣告格式

通常使用公司網址反寫,可以有多層包,包名採用全部小寫字母,多層包之間用”.”連線

類中包的宣告格式:

package 包名.包名.包名…;

如:Oracle網址oracle.com那麼網址反寫就為com.oracle

注意:宣告包的語句,必須寫在程式有效程式碼的第一行(註釋不算)

程式碼演示:

package com.oracle; //包的宣告,必須在有效程式碼的第一行

import java.util.Scanner;

import java.util.Random;

public class Demo {}

1.3     包的訪問

在訪問類時,為了能夠找到該類,必須使用含有包名的類全名(包名.類名)。

包名.包名….類名

如: java.util.Scanner

     java.util.Random

    com.oracle.Demo

帶有包的類,建立物件格式:包名.類名 變數名 = new包名.類名();

     com.oracle.Demo d = new com.oracle.Demo();

前提:包的訪問與訪問許可權密切相關,這裡以一般情況來說,即類用public修飾的情況。

類的簡化訪問

當我們要使用一個類時,這個類與當前程式在同一個包中(即同一個資料夾中),或者這個類是java.lang包中的類時通常可以省略掉包名,直接使用該類。

如:com.oracle包中有兩個類,PersonTest類,與Person類。我們在PersonTest類中,訪問Person類時,由於是同一個包下,訪問時可以省略包名,即直接通過類名訪問 Person。

類名 變數名 = new 類名();

Person p = new Person();

當我們要使用的類,與當前程式不在同一個包中(即不同資料夾中),要訪問的類必須用public修飾才可訪問。

package com.oracle02;

public class Person {}

1.4     import導包

我們每次使用類時,都需要寫很長的包名。很麻煩,我們可以通過import導包的方式來簡化。

可以通過導包的方式使用該類,可以避免使用全類名編寫(即,包類.類名)。

導包的格式:

import 包名.類名;

當程式匯入指定的包後,使用類時,就可以簡化了。演示如下:

//匯入包前的方式

//建立物件

java.util.Random r1 = new java.util.Random();

java.util.Random r2 = new java.util.Random();

java.util.Scanner sc1 = new java.util.Scanner(System.in);

java.util.Scanner sc2 = new java.util.Scanner(System.in);

//匯入包後的方式

import java.util.Random;

import java.util.Scanner;

//建立物件

Random r1 = new Random();

Random r2 = new Random();

Scanner sc1 = new Scanner(System.in);

Scanner sc2 = new Scanner(System.in);

import導包程式碼書寫的位置:在宣告包package後,定義所有類class前,使用導包import包名.包名.類名;

 訪問修飾符

在Java中提供了四種訪問許可權,使用不同的訪問許可權時,被修飾的內容會有不同的訪問許可權,以下表來說明不同許可權的訪問能力:

public

protected

default(不寫)

private

同一類中

同一包中(子類與無關類)

不同包的子類

不同包中的無關類

歸納一下:在日常開發過程中,編寫的類、方法、成員變數的訪問

(1)  要想僅能在本類中訪問使用private修飾;

(2)  要想本包中的類都可以訪問不加修飾符即可;

(3)  要想本包中的類與其他包中的子類可以訪問使用protected修飾

(4)  要想所有包中的所有類都可以訪問使用public修飾。

(5)  注意:如果類用public修飾,則類名必須與檔名相同。一個檔案中只能有一個public修飾的類。

  程式碼塊

區域性程式碼塊是定義在方法或語句中

特點:

(1)  以”{}”劃定的程式碼區域,此時只需要關注作用域的不同即可

(2)  方法和類都是以程式碼塊的方式劃定邊界的

class Demo{

    public static void main(String[] args) {

        {

              int x = 1;

              System.out.println("普通程式碼塊" + x);

        }

        int y = 99;

        System.out.println("程式碼塊之外" + y);

    }

}

1.1     構造程式碼塊

構造程式碼塊是定義在類中成員位置的程式碼塊

特點:

(1)  優先於構造方法執行,構造程式碼塊用於執行所有物件均需要的初始化動作

(2)  每建立一個物件均會執行一次構造程式碼塊。

public class Person {

    private String name;

    private int age;

     //構造程式碼塊

    {

        System.out.println("構造程式碼塊執行了");

    }

    Person(){

        System.out.println("Person無引數的建構函式執行");

    }

    Person(int age){

        this.age = age;

        System.out.println("Person(age)引數的建構函式執行");

    }

}

class PersonDemo{

    public static void main(String[] args) {

        Person p = new Person();

        Person p1 = new Person(23);

    }

}

1.2     靜態程式碼塊

靜態程式碼塊是定義在成員位置,使用static修飾的程式碼塊。

特點:

(1)  優先於構造程式碼塊執行,當以任意形式第一次使用到該類時執行。

(2)  該類不管建立多少物件,靜態程式碼塊只執行一次。

(3)  可用於給靜態變數賦值,用來給類進行初始化。

public class Person {

    private String name;

    private int age;

     //靜態程式碼塊

    static{

        System.out.println("靜態程式碼塊執行了");

    }

}