Java中,二維數(shù)組的定義和一維數(shù)組是一樣的。
public class Welcome {
public static void main(String[] args) {
int [][] num;
num=new int[3][4];
num[0][1]=1;
num[1][3]=12;
num[2][2]=21;
}
}
Java中二維數(shù)組的列數(shù)可以不同,比如第一行是2列,第二行是4列,等等。
有些類似與c語言中的指針數(shù)組。
public class Welcome {
public static void main(String[] args) {
int [][] num;
num=new int[3][];
num[0]=new int[2];
num[1]=new int[4];
num[2]=new int[3];
num[0][1]=12;
num[1][3]=23;
num[2][2]=34;
System.out.println(num[0][1]);
System.out.println(num[1][3]);
System.out.println(num[2][2]);
}
}
在java中沒有定義的自動賦值為0.
在定義時可以為二維數(shù)組來定義,但是在賦初值時 ,不要在定義大小了
int [][] num=new int[3][]{1,2,3,4,5,2,3,4,5,6} //error
public class Welcome {
public static void main(String[] args) {
int [][] num=new int[][]{1,2,3,4,5,2,3,4,5,6}; //error
int [][] num=new int[][]{{1,2,3,4,5},{2,3,4,5,6}}; //ok
}
}
定義二維數(shù)組還有一種方式
public class Welcome {
public static void main(String[] args) {
int [][] num={1,2,3,4,5,2,3,4,5,6}; //error
}
}
也可以定義不規(guī)則的二維數(shù)組
public class Welcome {
public static void main(String[] args) {
int [][] num={{1,2,3},{4,5},{2}};
System.out.println(num[0][2]);
System.out.println(num[1][1]);
System.out.println(num[2][0]);
}
}
在java中,不能使用像int num[3];這樣的定義數(shù)組,在定義數(shù)組時不能分配空間的大小,只能通過為數(shù)組添加對象來分配空間。
public class Welcome {
public static void main(String[] args) {
int num[];
num=new int[3];
}
}
或者在定義時直接定義大小。
public class Welcome {
public static void main(String[] args) {
int num[]=new int[3];
}
}
Java中建議使用int[] num 這種方式這種方式定義了一個int類型的數(shù)組[],數(shù)組名稱為num。
在定義時還可以直接初始化
public class Welcome {
public static void main(String[] args) {
int[] num={1,2,3};
}
}
但是這種方法只能在定義時進行。
public class Welcome {
public static void main(String[] args) {
int[] num=new int[]{1,2,3};
}
}
還可以使用new int方法來定義,如上
int[] num =new int[3]{1,2,3};這樣的寫法也是不允許的。不能分配空間大小。
最簡單的方法是
public class Welcome {
public static void main(String[] args) {
int [] num;
num=new int[3];
num[0]=1;
num[1]=12;
num[2]=21;
System.out.println(num[0]);
System.out.println(num[1]);
System.out.println(num[2]);
}
}
對字符類型賦值使用單引號' ',
public class Welcome {
public static void main(String[] args) {
char ch;
ch='a';
System.out.println(ch);
}
}
輸出為a
字符類型還可以直接使用整數(shù)來賦值,因為java中對字符類型使用的是uncode字符。
public class Welcome {
public static void main(String[] args) {
char ch;
ch=98;
System.out.println(ch);
}
}
輸出為b
在java中小數(shù)常量被默認為double類型,如1.3默認為double類型。如果要聲明為float類型,需要在之后加f,如1.3f
public class Welcome {
public static void main(String[] args) {
float f;
f=1.3f;
System.out.println(f);
}
}
輸出為1.3
在java中boolean 布爾類型只有2個取值是true和false,不能賦值為1之類的整數(shù)。
public class Welcome {
public static void main(String[] args) {
boolean bool;
bool=true;
System.out.println(bool);
}
}
輸出為true
在做條件判斷的時候,不能再像c語言那樣使用if(1)或where(1)這樣的語句。
只能寫為if(true)或where(true)這樣。
Byte b;
b=3;
b=b*3;
System.out.pringln(b);
編譯時會提示發(fā)現(xiàn)int類型,需要byte類型,這是因為b=b*3java會自動將參與運算的數(shù)據(jù)自動轉(zhuǎn)換為int類型。如果要輸出正確的數(shù)據(jù)則要進行強制類型轉(zhuǎn)換。
b=(byte)(b*3);
這樣才會對
public class Welcome
//聲明public的類,應(yīng)該作為文件名,一個源文件只能有1個或沒有public的類
{
public static void main(String[] args)
{
System.out.print("你好\n");
//不加ln,不加換行。或者在之后加\n也是換行
System.out.println("歡迎使用java開發(fā)");
//輸出命令,牢記!
}
}
對象的特征:狀態(tài)(state)和行為(behabior)
人 身高,體重 吃飯,睡覺
現(xiàn)實世界對象的狀態(tài)保存在軟件對象的變量中,先是世界對象的行為通過軟件對象的方法(函數(shù))來實現(xiàn)、。
類和對象
把相似的對象歸成一個類。
類就是模版定義了通用與一個特定種類的所有對象的狀態(tài)(變量)和行為(方法)
類是創(chuàng)建對象的模版,對象是類的實例。
掌握面向?qū)ο蟮碾y點在于思路的轉(zhuǎn)換,我們通常考慮解決問題的方法。而不是考慮將問題抽象成對象再去解決它。
編寫一個駕駛汽車的方法
面向過程的程序設(shè)計: 編寫一個方法,void drivercar();
面向?qū)ο蟮某绦蛟O(shè)計: 將一輛汽車看成一個對象,將所有汽車對象的共性抽取出來,設(shè)計一個類Car,
類中有一個方法void drive(),用Car這個類實例化一個具體的對象car,調(diào)用:car.drive().
new關(guān)鍵字的作用。
為對象分配內(nèi)存空間,引起對象構(gòu)造方法的調(diào)用。為對象返回一個引用。
構(gòu)造方法的名字和類名相同,并且沒有返回值。
構(gòu)造方法主要用于為類的對象定義初始化狀態(tài)。
我們不能直接調(diào)用構(gòu)造方法,必須通過new關(guān)鍵字來自動調(diào)用,從而創(chuàng)建類的實例。
java的類都要求有構(gòu)造方法,如果沒有定義構(gòu)造方法,java編譯器會為我們提供一個缺省的構(gòu)造方法,也就是不帶參數(shù)的構(gòu)造方法。
缺省構(gòu)造方法默認值:數(shù)值 0
booeean false
char ”\0"
對象 null
方法的重載:重載構(gòu)成的條件:方法的名稱相同,但是參數(shù)類型或參數(shù)個數(shù)不同,才能構(gòu)成方法的重載。
特殊變量this
this變量代表對象本身。
當類中有兩個同名變量,一個屬于類(類的成員變量),而另一個屬于某個特定的方法(方法的局部變量),
使用this區(qū)分成員變量和局部變量
使用this簡化構(gòu)造函數(shù)的調(diào)用。可以通過不帶參數(shù)的構(gòu)造方法調(diào)用帶參數(shù)的構(gòu)造方法。
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{
this(1,2);
}
一個類所有的實力(對象)調(diào)用的成員方法在內(nèi)存中只有一份拷貝,盡管在內(nèi)存中可能有多個對象,
而數(shù)據(jù)成員在類的每個對象所在內(nèi)存中都存在這一份拷貝。this變量允許相同的實例方法為不同的對象工作。
每當調(diào)用一個實例方法時,this變量將被設(shè)置成引用改實例方法的特定的類對象。方法的代碼接著會與this所代表的特定數(shù)據(jù)建立關(guān)聯(lián)。
內(nèi)存模型 的概念
靜態(tài)方法和靜態(tài)變量時屬于某一個類,而不屬于類的對象。
靜態(tài)方法和靜態(tài)變量的引用直接通過類名引用。
在靜態(tài)方法中不能調(diào)用非靜態(tài)的方法和引用非靜態(tài)的成員變量。反之,則可以。
可以用類的對象obj去調(diào)用靜態(tài)的方法method(),如 obj。method()。
final定義的變量要在定義時初始化也可以放在構(gòu)造函數(shù)中實現(xiàn)
常量通常定義為靜態(tài)的,是為了節(jié)省內(nèi)存。這時就要在定義時初始化。
final定義的常量一般默認用大寫。
繼承
繼承是面向?qū)ο蟮年P(guān)鍵
在java中,通過關(guān)鍵字extends繼承一個已有的類,被繼承的稱為父類(超類,基類),新的類稱為子類(派生類)。
在java中,不允許多繼承。
方法的覆蓋
在子類中定義一個與父類同名、返回類型、參數(shù)類型均相同的一個方法,稱為方法的覆蓋。覆蓋發(fā)生在子類與父類之間。
class Animal
{
int height,weight;
void eat()
{
System.out.println("animal eat");
}
void breathe()
{
System.out.println("animal breathe");
}
void sleep()
{
System.out.println("animal sleep");
}
}
class Fish extends Animal
{
void breathe()
{
System.out.println("fish bubble");
}
}
class Integration
{
public static void main(String[] args)
{
Animal an=new Animal();
Fish fh= new Fish();
an.breathe();
fh.height=30;
fh.breathe();
}
}
特殊變量super,提供了對父類的訪問。
可以使用super訪問父類被子類隱藏的變量或覆蓋的方法。
每個子類構(gòu)造方法的第一條語句,都是隱含的調(diào)用super(),如果父類沒有這種形勢的構(gòu)造函數(shù),那么在編譯的時候就會報錯。
class Animal
{
int height,weight;
void eat()
{
System.out.println("animal eat");
}
void breathe()
{
System.out.println("animal breathe");
}
void sleep()
{
System.out.println("animal sleep");
}
}
class Fish extends Animal
{
void breathe()
{
super.breathe();
super.height=40;
System.out.println("fish bubble");
}
}
class Integration
{
public static void main(String[] args)
{
//Animal an=new Animal();
Fish fh= new Fish();
//an.breathe();
fh.height=30;
fh.breathe();
}
}
多態(tài)性,子類有就調(diào)用子類的。沒有就調(diào)用父類的
instanceof
比較一個實例是否是一個類的實例
按位與
同時開才亮
關(guān) 關(guān) 暗
開 關(guān) 暗
關(guān) 開 暗
開 開 亮
01101101 與
00110111
00100101
只有11為1
按位或
任何一個開都亮。同時關(guān)才暗
01101101 或
00110111
01111111
只有00為0
按位異或
處于不同的狀態(tài)就亮
01101101 異或
00110111
01011010
只有01或10為1
按位取反
0變1,1變0
java中的3個移位預(yù)算符
左移:<<
帶符號右移:>>
無符號右移:>>>
數(shù) x x<<2 x>>2 x>>>2
17 00010001 00`01000100 00000100`01 00000100`01
-17 11101111 11`10111100 11111011`11 00111011`11
把數(shù)向左移動一位。相當與乘以2,向右移動一位,相當與除2。
源碼
將最高位表示符號位0正1負其余代表數(shù)值本身的絕對值
+7 源碼00000111
-7 源碼10000111
問題
+0源碼 00000000
——0源碼 10000000
表示方式不唯一,所以計算機中不采用這種方式
反碼
一個數(shù)為正。則它的反碼與源碼相同;一個數(shù)為負。則符號位為1。其余都是對源碼取反
+7 反碼 00000111
——7 反碼 11111000
問題
+0 反碼 00000000
——0 反碼 11111111
計算機中也不采用這種方式
補碼
利用溢出,我門可以將減法變成加法。
對于10進制 9-4=5
因為4+6=10
我們將6作為4的補數(shù)。將上面的減法變成加法
9+6=15
去掉高位1 得到5
一個字節(jié)表示一個數(shù)1個字節(jié)有8位超過就進1
一個數(shù)為正源碼。反碼。補碼相同。一個數(shù)為負。則符號位為1。其余各位對源碼取反。然后整個數(shù)加1。
+7 00000111
——7 11111000
11111001
+0 00000000
_0 11111111 加1
100000000 丟棄最高位
00000000