包的宣告與訪問、訪問修飾符、程式碼塊
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("靜態程式碼塊執行了");
}
}