---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------
封裝
類:類就是用來描述事物的屬性(成員變量)和行爲(成員方法)。
對象:對象就是這類事物,實實在在存在的個體。
類與對象的關係:通過new這類事物就可以將這類事物封裝爲對象,通過對象的引用就可以調用類中的成員變量和成員方法
成員變量與局部變量:
A.成員變量:作用於整個類;內存位置是在堆內存中,因爲對象的存在而存在
B.具部變量:作用於函數中,或者語句中;且存在於棧內存中
匿名對象:當對象的方法值只調用一次時,可以用匿名對象來完成,這樣比較簡化
可以將匿名對象作爲實際參數進行傳遞
面向對象(封裝)
封裝:就是指隱藏隨性的屬性和實現細節,對外僅僅提供公共的訪問方式。
好處:將變化隔離;便於使用;提高重用性;提高安全性
原則:將不需要對外的內容隱藏起 來;
把屬性都隱藏,對外提供公共方法。
Private; set (); get ();
構造函數:對象一建立就會調用與之對應的構造函數;作用是用於給對象進行初始化。
本身具有默認構造函數:類名(){};
構造代碼塊:給對象進行初始化,對象一建立就運行,而且優先於構造函數執行
區別:構造代碼塊是給所有對象進行統一初始化;可以將不同對象共性的內容抽取該區域。
而構造函數是給對應的對象初始化
Class person{
private String name;
Private int age;
Person(String name,int age){
Name=name;
Person(String name,int age){
Name=name;
Age=age;
}
{
System.out.println(“哭..........................”);
}
}
Class personDemo{
Mian(){
Person p=new person();
}
}
(this: 代表本類對象,代表它所在函數所屬對象的引用。
效果:看上去是用於區分局部變量和成員變量同名情況
構造函數間的調用:this( );函數調用函數,只能在構造函數的第一行
注意:一般函數是不能調用構造函數,
/static 關鍵字(只能修飾成員方法和成員變量);4.無需建立對象:直接類名調用
特點:1.隨着類的加載而加載(週期過長);2. 優先於對象存在;3. 被所以對象所共享
內存位置:隨着類加載存於方法區域中;隨着類的消失而消失
一般變量:存在於堆內存中;隨着對象的垃圾回收而消失
注意:靜態方法只能訪問靜態成員
非靜態方法可以訪問靜態和非靜態
2;靜態方法中不能有this super 關鍵字。以爲靜態優先於對象存在
Day6 main函數(作爲程序的入口)
靜態變量的應用:當對象出現共享數據時可以定義
靜態函數:當功能內部沒有服務到靜態數據(對象的特有數據)
那麼該功能方法可以定義成靜態
例子:如工具類
指定路徑查找:set classpath=.;c:\myclass 點是當前路徑,+指定路徑
幫助文檔製作:
/**
@auther :作者
@version :版本號
方法上面@param arr 參數接收一個int類型的數組
@return 會返回一個該數組中的最大值
*/
編譯時,指定文檔的存放位置:javadoc -d (E:\myclass)或者當前maclass -auther -version 類名.java
注意:構造函數的權限隨着類的改變而改變
靜態代碼塊:static {靜態代碼塊中的執行語句}
特點:隨着類的加載而執行,只執行一次。 用於給類進行初始化
構造代碼塊:{ 執行語句}是給所有對象初始化,隨着對象的建立而初始化
類一加載:靜態代碼塊 >構造代碼塊 >Static靜態方法
繼承:day7
1,提高代碼的複用性 2,讓類與類之間存在了關係,有了這個關係纔有了多態的特性
例子;經理類
class Emplouyee{
private String name;
private String id;
private double pay;
Emplouyee(String name,String id,double pay){
this.name=name;
this.id=id;
this.pay=pay;
}
public void work();
}
class Manager extends Employee{
private int bonus;
Manager(String name,String id,double pay,int bonus){
super(name,id,pay);
this.bonus=bonus;
}
public void work(){
System.out.println("經理開始工作:");
}
}
class Pro extends Employee{
Pro(String name,String id,double pay){
super(name,id,pay);
}
public void work(){
System.out.println("普通員工開始工作:");
}
}
class JiChengDemo{
public static void main(String[] args){
Manager m=new Manager();
m.work();
}
}
抽象類:abstract
例子:模板設計模式 ;類與抽象類是繼承關係
定義:在定義功能時,功能的一部分是確定的,但有一部分是不確定的,而卻定的部分在使用不確定的部分,那麼這時就將不 確定的部分暴露出去,有該類的子類去完成。
需求:獲取一程序運行的時間。
abstract class GetTime{
public final void getTime(){
long start=System.currentTimeMillis();
runCode();
long end=System.currentTimeMillis();
System.out.println("毫秒值:"+(end-start));
}
public abstract void runCode();
}
class SubTime extends GetTime{
public void runCode(){
for(int x=0;x<4000;x++){
System.out.print(x);
}
}
}
class GetTimeDemo{
public static void main(String[] args){
SubTime st=new SubTime();
st.getTime();
}
}
接口:interface
類與接口是實現關係(implements)
特點:接口中常見定義;常量,抽象方法。
接口中的成員都有固定的修飾符
Public static final --
Public abstract --
接口可以被多實現,
接口與接口直接可以多繼承,但其中的方法一定是一模一樣的,否則在調用方法 時不明確
多態:
體現:父類的引用指向直接的子類對象,父類的引用頁可以接受直接的子類對象
前提:必須是類與類之間有關係,要麼繼承,要麼實現,另外;還存在覆蓋
多態的好處:多態的出現大大的提供程序的擴展性、
多態的應用:animal 的例子和主板示例 instanceof 判斷所屬類型
還有就是object類,equals()方法 toString()方法
abstract class Animal{
public abstract void eat();
}
class cat extends Animal{
public void eat(){
System.out.println("吃魚!!");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("吃屎!!");
}
public void kanjia(){
System.out.println("看萬秀雲");
}
}
class Pig extends Animal{
public void eat(){
System.out.println("吃飼料!!");
}
public void gongDi(){
System.out.println("翻地");
}
}
class duotai1{
public static void main(String[] args){
//Animal a=new cat();//類型提升,向上轉型
//a.eat();
//cat c=(cat)a;//強轉父類引用,父轉子,向下轉型
function(new cat());
//c.catchMouse();
function(new Dog());
function(new Pig());
}
public static void function(Animal a){
a.eat();
if(a instanceof cat){
cat c=(cat)a;
c.catchMouse();
}
else if(a instanceof Dog){
Dog c=(Dog)a;
c.kanjia();
}
else if(a instanceof Pig){
Pig c=(Pig)a;
c.gongDi();
}
}
}
Day9 : 內部類
規則:1,內部類可以直接訪問外部類中的成員(包括私有成員);;原因是內部類有外部類的引用:類名.this
2,外部類要訪問內部類,必須建立內部類對象
內部類在成員位置上:可以private ,static修飾
在局部位置的內部類:如果局部的變量被final y=8;修飾,局部內部類的方法纔可以訪問
public class Demo1{
public static void main(String[] args){
Outer o=new Outer();
o.function();
}
}
class Outer{
private int x=3;
public void function(){
final int y=8;
class Inner1{
public void show(){
//內部類訪問外部類成員,帶外部類引用this
System.out.println("內部類1:"+Outer.this.x);
System.out.println("內部類1:"+y);
}
}
Inner1 i=new Inner1();
i.show();
}
}
在外部類中定義一個匿名內部類:前提 是他有一個父類(包括繼承extends或 實現implements)
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------