類與類的關系
成都創新互聯公司是一家專業提供蓋州企業網站建設,專注與成都做網站、成都網站建設、H5建站、小程序制作等業務。10年已為蓋州眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。
1、依賴關系
依賴關系表示一個類依賴于另一個類的定義。通俗來講即是類A中使用了另外的一個類B,且類B并非類A中作為屬性存在,即表示類A依賴于類B。對象之間最弱的一種關聯方式,是臨時性的關聯。代碼中一般指由局部變量、函數參數、返回值建立的對于其他對象的調用關系。
class A{
public B method(C c){
B b = new B();
return b;
}
}
登錄后復制
2、關聯關系
關聯關系是類與類之間的聯接,它使一個類知道另一個類的屬性和方法。通俗來講即類A中有一個屬性b,該屬性的數據類型為類B,類A可以通過屬性b調用類B的屬性與方法。也即一般來說的has-a的關系。
class A{
public B b;
}
登錄后復制
3、聚合關系
聚合關系是特殊的關聯關系,其與關聯關系在代碼上并無實際上的區別,二者的區別主要體現在語義上,關聯關系即代表可有可無,而聚合關系則代表必須擁有(注:被聚合或關聯的事務也代表一個單獨的事務,其也有獨立的意義。)舉例說明就像筆記本電腦,其與外接鼠標就是關聯關系,外接鼠標只是附件,而想cpu,內存條等是組成一個筆記本電腦所必須的,而他們的關系就是聚合關系。
class computer{
public Cpu cpu1;
}
登錄后復制
4、組合關系
組合關系也是特殊的關聯關系,其類似于聚合關系,但比聚合關系更加的強,即對象 A 包含對象 B,對象 B 離開對象 A 沒有實際意義。舉例來講就是作為一個人,你可以沒有錢,但你不能沒有腦子(物理),你與錢就是關聯關系,錢乃身外之物,而你與大腦則是組合關系,大腦每人就一個,沒了它,你便無法存在,而單獨一個腦子離開了人也就失去了它應有的作用。
class person{
public Head head;
}
登錄后復制
5、繼承關系
類與類的繼承關系,類與接口的實現關系。繼承指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力。
class A extends B{
public A(){
super();
}
}
登錄后復制
類與類之間的繼承只能是單繼承,但可以多層繼承。
單繼承即表示一個類只可以繼承一個父類。
多層繼承即是類A繼承類B,而類B又繼承了類C,所以類A間接繼承了類C
類與接口之間的關系
注:Java8新增了默認方法和靜態方法;
public interface A{
//抽象方法
public void a1();
//默認方法
default void a2() {
System.out.println("a2");
}
//靜態方法
static void a4() {
System.out.println("a4");
}
}
登錄后復制
?
其中,靜態方法只供接口直接使用
類可以繼承一個類且實現多個接口
注意:
1.如果多個接口中有同名的抽象方法,那么實現類只需要實現一次即可
2.如果多個接口中有同名的默認方法,那么實現類必須重寫一次,并且要去掉default關鍵字
接口可以繼承多個接口
注意:
1.如果多個父接口中有同名的抽象方法,那么子接口只需要實現一次即可
2.如果多個父接口中有同名的默認方法,那么子接口必須重寫默認方法,必須要加default關鍵字
依賴注入是Spring的思想,在使用Spring進行開發時,可以將對象交給spring進行管理,在初始化時spring創建一批對象,當你需要用的時候只要從spring的容器中獲取對象,而不用自己去new,當然在對象創建的時候可以注入另一個對象。比如A,B兩個對象都由spring管理,A中持有對B的引用,那么spring在生成A對象的時候就已經吧B對象的一個實例給到A了,當你在A中用到B的時候直接使用就可以了。
這個你就要看源代碼了!int和Integer不是一個類型,在jdk1.5以后有了原生數據類型自動封裝和拆裝功能這個程序才可以實現!Jdk1.4需要強制類型鉆換才可以實現!當你Integer i1=127;Integer j1=127;的時候,127屬于byte類型的范圍,當在這個范圍封裝時候他會自動指向同一個Integer,所以相等,而當超過byte的范圍他就會重新生成一個Interger對象,就不等了,當然你要具體了解要自己看源代碼才可以!在Eclipse里要看源代碼,你按著ctrl用鼠標點擊你程序中的類名就可以直接跳到源代碼處!
依賴關系是指一個類對別一個類的依賴,比如說Employee類中有一個方法叫做TakeMoney(Bank bank)這個方法,在這個方法的參數中用到了Bank這個類,那么這個時候可以說Employee類依賴了Bank這個類,如果Bank這個類發生了變化那么會對Employee這個類造成影響。
class Person {
public String name; //定義一個name屬性
public String location; //定義一個location屬性
Person(String name){ //定義一個構造方法,用于初始化name屬性
this.name = name;
location = "beijing"; //初始化location屬性
}
Person(String name,String location) { //重載一個構造方法,用于初始化name屬性和location屬性
this.name = name;
this.location = location;
}
public String info() { //定義一個方法,返回實例的屬性信息
return "name:"+ name +"location:"+location;
}
}
class Teacher extends Person { //定義一個Teacher類,從Person繼承
private String capital;
Teacher (String name,String capital) { //定義一個構造方法,用于初始化name和capital屬性
this(name,"beijing",capital); //調用本類中定義的構造方法
}
Teacher (String n,String l,String capital){ //定義一個構造方法,用于初始Teacher類中的capital,name和location屬性
super (n,l); //調用父類中的構造方法初始化name,location屬性
this.capital = capital; //初始化Teacher類中的capital屬性
}
public String info() { //重寫父類中的info()方法,并且附加capital屬性的信息
return super.info() + "capital" + capital; //返回Teacher的各個屬性信息
}
}
class Student extends Person { // 定義一個Student類,從Person繼承
private String school; //定義chool字段
Student(String name,String school) { //定義一個構造方法,用于初始化name和school屬性
this(name,"beijing",school); //調用本類中定義的構造方法
}
Student(String n,String l,String school) { //定義一個構造方法,用于初始Student類中的school,name和location屬性
super(n,l); //調用父類中的構造方法初始化name,location屬性
this.school = school; //初始化Student類中的school字段
}
public String info() { /重寫父類中的info()方法
return super.info() + "school:" + school; //返回Student類中各個字段或屬性信息
}
}
public class Test { //定義Test主類,用于測試定義各個類
public static void main (String[] args) {
Person p1 = new Person("A"); //實例化Person類,調用構造器初始化name屬性
Person p2 = new Person("B","shanghai"); //實例化Person類,調用構造器初始化name,location屬性
Student s1 = new Student("C","s1"); //實例化Student類,調用構造器初始化name,school屬性
Student s2 = new Student("C","shanghai","s2"); //實例化Student類,調用構造器初始化name,location,school屬性
Teacher t1 = new Teacher("D","perfessor"); //實例化Teacher類,調用構造器初始化name,capital屬性
System.out.println(p1.info()); //輸出實例p1的屬性信息
System.out.println(p2.info()); //輸出實例p2的屬性信息
System.out.println(s1.info()); //輸出實例s1的屬性信息
System.out.println(s2.info()); //輸出實例s2的屬性信息
System.out.println(t1.info()); //輸出實例t1的屬性信息
}
}
1)盡量指定類、方法的final修飾符。帶有final修飾符的類是不可派生的,Java編譯器會尋找機會內聯所有的final方法,內聯對于提升Java運行效率作用重大,此舉能夠使性能平均提高50%。
2)盡量重用對象。由于Java虛擬機不僅要花時間生成對象,以后可能還需要花時間對這些對象進行垃圾回收和處理,因此生成過多的對象將會給程序的性能帶來很大的影響。
3)盡可能使用局部變量。調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧中速度較快,其他變量,如靜態變量、實例變量等,都在堆中創建速度較慢。
4)慎用異常。異常對性能不利,只要有異常被拋出,Java虛擬機就必須調整調用堆棧,因為在處理過程中創建了一個新的對象。異常只能用于錯誤處理,不應該用來控制程序流程。
5)乘法和除法使用移位操作。用移位操作可以極大地提高性能,因為在計算機底層,對位的操作是最方便、最快的,但是移位操作雖然快,可能會使代碼不太好理解,因此最好加上相應的注釋。
6)盡量使用HashMap、ArrayList、StringBuilder,除非線程安全需要,否則不推薦使用 Hashtable、Vector、StringBuffer,后三者由于使用同步機制而導致了性能開銷。
盡量在合適的場合使用單例。使用單例可以減輕加載的負擔、縮短加載的時間、提高加載的效率,但并不是所有地方都適用于單例。
分享題目:如何分析JAVA代碼依賴 java忽略依賴編譯類
路徑分享:http://vcdvsql.cn/article12/hehgdc.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、關鍵詞優化、ChatGPT、定制網站、Google、微信公眾號
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯