類就像是菜譜,對象就像是菜。對象是類的實例。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 報錯