前言:
沒有人天生就喜歡辛苦和奔波,但生存規則就是這麼殘酷,不進則退,你不能拼命努力,就隻能碌碌無為。
我們上一篇聊到了内部類,這一片我們聊一下包類庫,針對于以下的概念,都會有實體例子配合着,給大家示範,希望給曆險中的你帶來一些幫助!!!
一.介紹
java包類庫由一組支援程式開發的類組成。一個編譯器或開發環境以一個類庫為基礎。
類庫可以單獨從第三方軟體商獲得。類庫方法從技術上說并不屬于某種語言。例如String類不是java語言的内建部分,而是java标準類庫的一部分。類庫由幾組相關的類簇構成,通常稱為java API,即應用程式接口。java标準類庫的類被劃分為包,每個類屬于一個具體的包。可以在聯機java API文檔中尋找需要的包。
二.知識點介紹
1、概念
2、定義格式
3、通路
4、import導包
5、通路權限
6、項目分層
三.知識點詳解:
1、包的概念
java的包,其實就是我們電腦系統中的檔案夾,包裡存放的是程式生成的.class檔案。
當.class檔案很多的時候,通常我們會采用多個包進行存放管理他們,這種方式稱為分包管理,分包管理是組織軟體項目結構的基本方式。
在項目中,我們将相同功能的類放到一個包中,友善管理。并且日常項目的分工也是以包作為邊界。
類中聲明的包必須與實際class檔案所在的檔案夾情況相一緻,即類聲明在a包下,則生成的.class檔案必須在a檔案夾下,否則,程式運作時會找不到類。
2、包的定義格式
通常使用公司網址反寫,可以有多層包,包名采用全部小寫字母,多層包之間用”.”連接配接
類中包的聲明格式:package 包名.包名.包名…;
如:百度官網網址baidu.com那麼網址反寫就為com.baidu
注意:聲明包的語句,必須寫在程式有效代碼的第一行(注釋不算)
格式示範:
package com.baidu;//包的聲明,必須在有效代碼的第一行
import java.util.Scanner;
import java.util.Random;
public classDemo
3、包的通路
在通路類時,為了能夠找到該類,必須使用含有包名的類全名(包名.類名)。
包名.包名….類名
如:
java.util.Scanner
java.util.Random
com.baidu.Demo
帶有包的類,建立對象格式:包名.類名 變量名 = new包名.類名();
com.baidu.Demod = new com.baidu.Demo();
前提:包的通路與通路權限密切相關,這裡以一般情況來說,即類用public修飾的情況。
3.1、類的簡化通路
當我們要使用一個類時,這個類與目前程式在同一個包中(即同一個檔案夾中),或者這個類是java.lang包中的類時通常可以省略掉包名,直接使用該類。
如:cn.itcast包中有兩個類,PersonTest類,與Person類。我們在PersonTest類中,通路Person類時,由于是同一個包下,通路時可以省略包名,即直接通過類名通路 Person。
類名 變量名 = new類名();
Person p =new Person();
當我們要使用的類,與目前程式不在同一個包中(即不同檔案夾中),要通路的類必須用public修飾才可通路。
package cn.com.javahelp02;
代碼示範:
package Test2;
import com.Test.person;
public class Tested {
public static void main(String[] args) {
//在通路類時,為了能夠找到該類,使用類時,應該使用 包含 包 的類全名。
// cn.itcast.Person p = newcn.itcast.Person();
// p.eat();
// cn.itcast6.Tree t = newcn.itcast6.Tree();
//當在同一個檔案夾下不需要使用類全名
// Tree t = new Tree();
// t.chengLiang();
//因為String在java.lang包下 是以不需要使用類全名不需要導包
// String s = "";
//當被使用的類與使用的類不在同一個檔案夾下時,
//被使用者必須用public修飾才可被其他包下的類通路,
//我們可以通過導包的方式使用該類,避免使用類全名
person p = new person();
//當多個檔案夾下有相同的類名時,隻能有一個導包使用,其他必須仍然書寫全名。
Test2.person p2 = new Test2.person();
}
}
4、import導包
我們每次使用類時,都需要寫很長的包名。很麻煩,我們可以通過import導包的方式來簡化。
可以通過導包的方式使用該類,可以避免使用全類名編寫(即,包類.類名)。
導包的格式:
import 包名.類名;
當程式導入指定的包後,使用類時,就可以簡化了。示範如下
//導入包前的方式
//建立對象
java.util.Randomr1 = new java.util.Random();
java.util.Randomr2 = new java.util.Random();
java.util.Scannersc1 = new java.util.Scanner(System.in);
java.util.Scannersc2 = new java.util.Scanner(System.in);
//導入包後的方式
importjava.util.Random;
importjava.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包名.包名.類名;
5、通路權限
在Java中提供了四種通路權限,使用不同的通路權限時,被修飾的内容會有不同的通路權限,以下表來說明不同權限的通路能力:
public | protected受保護的 | default預設 | private私有的 | |
同一類中 | √ | √ | √ | √ |
同一包中(子類與無關類) | √ | √ | √ | |
不同包的子類 | √ | √ | ||
不同包中的無關類 | √ |
是以,在日常開發過程中,如果允許其他包的類通路使用public,如果僅允許其他包的子類通路使用protected,僅本包内的類通路使用預設,僅能本類中通路使用private。
代碼示範:
我們先看一下代碼結構:
person.java
package Test2;
public class person {
/*
* 通路權限修飾符
*/
public static class Person {
public void method1(){
System.out.println("公共方法");
}
protected void method2(){
System.out.println("受保護的方法(為了給子類使用)");
}
void method3(){
System.out.println("預設權限方法");
}
private void method4(){
System.out.println("私有方法");
}
//同一個類中
public void test(){
method1();
method2();
method3();
method4();
}
}
/*
*四種方法都可以執行
*/
public static class Test {
public static void main(String[] args) {
Person p = new Person();
p.test();
}
}
/*
* 同一個包下 子類 或者無關類
*/
public class Student {
public void test(){
Person p = new Person();
p.method1();
p.method2();
p.method3();
// p.method4();
}
}
}
Student.java
package Test2;
/* * 不同包下的子類
*/
public class Student extends person.Person {
public void test(){
method1();
method2();
// method3();
// method4();
}
}
Tested.java
package Test2;
public class Tested {
private final static String name = "磊哥的java曆險記-@51部落格";
public static void main(String[] args) {
/*
* 不同包下的無關類
*/
person.Person p = new person.Person();
p.method1();
p.method2();
p.method3();
//p.method4();
System.out.println("============="+name+"=============");
}
}
執行結果:
歸納:
在日常開發過程中,編寫的類、方法、成員變量的通路
(1)要想僅能在本類中通路使用private修飾;
(2)要想本包中的類都可以通路不加修飾符即可;
(3)要想本包中的類與其他包中的子類可以通路使用protected修飾
(4)要想所有包中的所有類都可以通路使用public修飾。
注意:
如果類用public修飾,則類名必須與檔案名相同。一個檔案中隻能有一個public修飾的類。
6、項目分層(分包)
一個項目随着功能的增加、繼承樹的擴充會出現衆多的Java類。這時,不僅需要将一個類中的整體功能抽取出成為獨立方法,還需要将功能邊界即功能所有者界定,而這就是定義類與包的過程。
在定義好不同的類之後,再将相似功能的類放到同一個包中進行統一管理。
歸納:
我們後期會講到架構,對于一個項目去講,說用到ssm,ssh,微服務,一站式,也就意味了這個項目有一定的代碼體量,我們不可能按照現在的樣子,建立一個包,全放裡面,是以我們要給這些分包,我們簡單看一下,大概會分為哪幾類:
1、view層: 視圖層,項目的頁面展示代碼。
2、controller層: 控制層, 接受界面傳入的資料,将要資料交給業務層處理。
3、service層: 業務層, 功能的實作, 與controller控制層和資料通路層DAO互動, 将對資料庫的操作交給DAO資料通路層來處理。
4、 dao層: 資料通路層, 主要用來和資料庫交換資料。
5、 db資料庫: 這裡指資料庫,MySQL、SQLServer、Oracle、Sybase、DB2
6、 實體包: 存放JavaBean(實體類,一個表一個類,最好建立的實體類與資料庫裡的表的名字和數量都一樣。
7、 tools工具包:存放項目中封裝好的工具類。
8、test 測試包: 項目功能測試的代碼(就是目前階段最常見的)
如果再詳細,還會有很多的分層,這裡就不一一介紹了,等後面有機會,會和兄弟們細聊!
結語:
感謝兄弟們的持續關注,文章中對應概念下都會有代碼和代碼示範,初學的兄弟們可以自己動手試試!
後面會持續更新java基礎這一系列的文章!