對Java的面臨對象編程中對象和援用和外部類的懂得。本站提示廣大學習愛好者:(對Java的面臨對象編程中對象和援用和外部類的懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是對Java的面臨對象編程中對象和援用和外部類的懂得正文
比來應用上班的時刻看了看的think in java感到再看 和第一次看年夜紛歧樣
接上去說一下java中對象和援用的關系,和外部類的概念。
1、java中一切都是對象
在java中是甚麼來操作者對象呢?謎底是援用,這就比如C或許C++中的指針。
假如用具有一個援用,那末此時你必需讓其和一個對象聯系關系在一路,不然這個援用其實不會像你想象的那樣任由你的掌握,例如你創立了一個String的援用:
String s ;
而此時並未與任何對象聯系關系,假如此時你去做一些操作,如挪用String的一些辦法,確定是會湧現成績,(一些根本類型除外,由於你在界說的時刻,它們就會付與初始值的),所以在應用錢必需和對象停止聯系關系:
String s = new String();
或許
String s = “my name is ajun”;
像如許便可以了。
2、怎樣和對象停止聯系關系
在java中平日會經由過程new來創立一個對象,來和援用停止聯系關系,如:
String s = new String("my name is ajun");
如許不只創立了一個對象和援用s停止聯系關系,同事也停止初始化,同時我們也能夠創立屬於本身的對象類型。
3、存儲地位
(1)客棧:普通存儲援用和根本類型變量,客棧重要是經由過程客棧指針高低挪動來對內存停止分派和釋放。
根本類型變量其實不順應於new停止創立,由於其所占的內存較小。
(2)堆:用於存儲java對象,當法式履行new的時刻,堆就會分派一個空間給這個對象,記住堆停止內存的分派和釋放是比客棧停止存儲和釋放內存消費更多的時光,這就是根本類型變量要存在客棧中了,由於根本類型變量是用的最頻仍的,頻仍的存儲和釋放內存,在消費更多的時刻,機能可想而知的。
4、外部類
(1)、外部類基本常識:
普通界說在java類外部的類成為外部類
外部類可以分為:界說在辦法體內部的類、界說辦法外部的類、靜態外部類(只能界說在辦法內部),匿名外部類
解釋:
界說在辦法裡面的類:
類的成員變量(靜態、非靜態)可以拜訪,為了包管可以或許准確的援用的類的成員變量,所以必需先實例化內部類的對象,才可以實例化外部類的對象
拜訪權限可以任何,可以把它算作類的成員變量,如許懂得就很多多少來了。
界說在辦法體內的類;
類的成員變量(靜態、非靜態)可以拜訪,為了包管可以或許准確的援用的類的成員變量,所以必需先實例化內部類的對象,才可以實例化外部類的對象
拜訪權限弗成以有,把他算作辦法的部分變量便可以了。
靜態外部類:
只能拜訪類的靜態成員變量
拜訪權限任何
匿名外部類:
類的成員變量(靜態、非靜態)可以拜訪,為了包管可以或許准確的援用的類的成員變量,所以必需先實例化內部類的對象,才可以實例化外部類的對象
拜訪權限弗成以有
(2)、外部類的感化
外部類可以很好的隱蔽類,普通類不許可有private protect default拜訪權限。
外部類可以完成多重繼續,填補了java不克不及多繼續的特色
(3)、例子
package com.ajun.test.innerclass.example; /** * 生果內容 * @author Administrator * */ public interface Contents { String value(); } package com.ajun.test.innerclass.example; /** * 生果目標地 * @author Administrator * */ public interface Destination { //目標地 String readLabel(); } package com.ajun.test.innerclass.example; public class Goods { private String des="is ruit!!"; //辦法內部 private class Content implements Contents{ private String name = "apple "+des; @Override public String value() { return name; } } //辦法內部 private class GDestination implements Destination{ private String label ; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } //匿名外部類 public Destination getdestination(final String label){ return new Destination(){ @Override public String readLabel() { return label; } }; } public Destination dest(String s){ return new GDestination(s); } public Contents content(){ return new Content(); } public Destination dest2(String s){ class GDestination implements Destination{ private String label; private GDestination(String label){ this.label= label; } @Override public String readLabel() { return label; } } return new GDestination(s); } } package com.ajun.test.innerclass.example; public class Test { public static void main(String [] a){ Goods gs = new Goods(); Contents c = gs.content(); Destination d = gs.dest("Beijing"); System.out.println(c.value()); System.out.println(d.readLabel()); Destination d1 = gs.getdestination("Shanghai"); System.out.println(d1.readLabel()); System.out.println(gs.dest2("Tianjin").readLabel()); } }
個中Content和Gdestination獲得了很好的隱蔽,裡面挪用的時刻,基本就不曉得挪用的是詳細哪一個類,使這個類具有多繼續的特征。
輸入;
apple is ruit!! Beijing Shanghai Tianjin