對象和類

類就像是菜譜,對象就像是菜。對象是類的實例。java

對象=屬性+方法。 對象是變量是類的具體實現。算法

類是規範定義是存在在紙面上的東西,從萬千對象中抽象出來的共性。eclipse

op:oriented   procedure    面向過程函數

oo:oriented    object          面向對象,對象是主體,方法從屬於對象this

 

結構體vs類spa

結構體是多種變量的捆綁,成員默認爲public指針

類=變量+方法     私有變量沒法直接訪問要經過父類的方法來間接訪問對象

 

 

面嚮對象語言特色:認識性,類別性,多態性,繼承性。blog

沒有兩個對象是徹底同樣的。排序

obj至關因而指針。

 

基本類型賦值v普通對象賦值

基本對象賦值經過拷貝而對象賦值則是reference賦值

public class ArgumentPassingTest {

public static void main(String[] args) {
int a = 1, b = 2;
swap(a,b);
System.out.println("a is " + a + ", b is " + b); //a=1, b=2,經過拷貝賦值a和b的值並無發生變化

MyNumber obj1 = new MyNumber();
MyNumber obj2 = new MyNumber();
obj2.num = 10;
swap(obj1, obj2);
System.out.println("obj1 is " + obj1.num + ", obj2 is " + obj2.num); // obj1 10, obj2 5,經過reference賦值指針指向的位置發生的變化

}
public static void swap(int m, int n)
{
int s = m;
m = n;
n = s;
}
public static void swap(MyNumber obj3, MyNumber obj4)
{
int s = obj3.num;
obj3.num = obj4.num;
obj4.num = s;
}

}

 

 

成員變量有默認值而局部變量沒有默認值。

 

 

排序代碼:

import java.util.Scanner;

public class Main

{
public static void main(String[] args)
{
//建立Scanner對象
//System.in表示標準化輸入,也就是鍵盤輸入
Scanner sc = new Scanner(System.in);
//利用hasNextXXX()判斷是否還有下一輸入項
int a = 0;
int b = 0;
int c = 0;
if (sc.hasNext()) {
a = sc.nextInt();
}

if (sc.hasNext()) {
b = sc.nextInt();
}
if (sc.hasNext()) {
c = sc.nextInt();
}
if(a==0 || b==0 || c==0)
{
System.out.println("輸入不能爲0");
System.exit(-1);
}
MyNumber obj1, obj2, obj3;

//從這裏開始,基於swap函數,完善你的程序
obj1=new MyNumber();
obj2=new MyNumber();
obj3=new MyNumber();
obj1.num=a;
obj2.num=b;
obj3.num=c;
swap(obj1,obj2);
swap(obj1,obj3);
swap(obj2,obj3);
//
System.out.println(obj1.num);
System.out.println(obj2.num);
System.out.println(obj3.num);
//

//程序結束

}
public static void swap(MyNumber m, MyNumber n)

{

if(m.num > n.num)

{
int s = m.num;
m.num = n.num;
n.num = s;
}
}
}
class MyNumber
{
int num;
}

 

 

構造函數:在對象建立時就給成員變量賦值

構造函數名稱必須和類名相同,且無返回值。

每一個java類必需要有構造函數,若是沒有顯示的定義構造函數Java編譯器會自動爲該類產生一個空的無形參構造函數。

一個類能夠有多個構造函數,只要形參列表不相同便可

子類構造函數第一句話都默認調用父類的無形參構造函數super(),super語句必需要放在第一條。

iava無析構函數(消除對象),Java提供了內存自動回收機制,JVM會自動回收所分配的對象內存。回收效率的高低由垃圾回收器GC(GarbageCollector)回收算法來決定。

 

當變量(對象)被建立時,變量將佔據內存;

當變量消亡時,系統將回收內存。

每一個變量都是有生命週期的,它只能存儲在離它最近的一對{}中。

 

 

信息隱藏和this指針

信息隱藏:一、保護屬性信息;二、公開行爲信息

屬性:private

方法public

經過類的方法來間接的訪問類的屬性。

get和set方法都是共有public的

外界對成員的操做只能經過get和set方法

能夠用java的IDE(eclipse)來快速生成get、set方法        source->generate getters and setters

       

this指針的做用:

一、this指針指向本類中的成員變量    this.m=m

二、this指針指向本類中的成員方法     this.add(m,n)

三、this指針能夠代替本類的構造函數     this(5)

 

作題所得知識點:

一、class文件是字節碼文件

二、形參名args能夠修改

三、main方法能夠被重載

四、double不精確,不能用於switch

五、變量名不能用數字打頭當是能夠用$和_打頭

六、區分i++和++i

七、float類型要加f,不加默認爲double類型(好比1.34)

八、

class Mixer {

    Mixer() { }

    Mixer(Mixer m) { m1 = m; }

    Mixer m1;//建立了類型爲Mixer的變量m1,m1是引用地址指向內存new的地址空間

 

    public static void main(String[] args) {

        Mixer m2 = new Mixer();

        Mixer m3 = new Mixer(m2);  m3.go();

        Mixer m4 = m3.m1;  m4.go();//m3.m1實際上指向的是m2的內存地址空間有對應的對象就能夠調用方法

        Mixer m5 = m2.m1;  m5.go();//m1變量沒有new過沒有實例化不能調用對象的方法

    }

    

    void go() { System.out.print("hi "); }

 

}

輸出結果 hi hi 報錯 

相關文章
相關標籤/搜索