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