一篇簡單的文章做爲本身轉型的開始,之後由嵌入式開發轉向安卓app開發java
javaee企業版程序員
javase 標準板,作桌面應用程序數組
javame小型版,針對小產品,好比手機(這個已經不用了,如今用的是安卓)app
System.out.print(a);
函數
print只是輸出‘字符’和「字符串」和 變量 this
print('a'+1) 變爲輸出 98 ‘a'的ASCII爲97。print(’你‘+1);由於漢字也是存放表中spa
java數據類型分爲byte 1個字節 short 兩個字節 int 4個字節 long 8個字節 float 4個字節 double 8個字節 char兩個字節code
byte b = 4; //將int型 4對比是否符合前面數據類型的範圍,符合則自動轉換爲byte型orm
b = 4 +6; // 這裏也是將int型 先比較計算結果是否超過變量範圍,沒超自動轉換爲byte類型,超了報錯對象
byte b1 = 3;
byte b2 = 4;
b = b1 +b2; //這個會報錯,丟失精度,由於b1和b2爲變量,無法肯定計算結果是否會超過自己範圍
同理若是上面改成
b = b1 + 10; //也是報錯,由於b1是變量,值不肯定,加上數會超範圍
同理改成
b = b1 - 3; //也是報錯由於 byte減int無法進行
同理
int b = 10;
byte c = 9;
b = b - c ; //ok
c = b - c; //報錯。由於可能相減的值仍會比byte範圍大。
int x;
x = b1 + b2; //能夠。由於int型範圍大於byte,byte的計算結果不會超出int型的範圍。
int x1 = Integer.VALUE;
int x2 = 2;
x = x1 + x2; //這個雖然運算結果會超過範圍,可是編譯時不會報錯,由於同類型,運算結果超出時結果是負數。
while(true) //while循環只能是(true/false) 不能夠和c語言同樣while(1);
{
}
print("a" + 3);
輸出a3
int a = 4;
int b = 5;
pirnt(a+b); //獲得9,沒有到字符串鏈接,就是進行計算
print("a" + a + b); //獲得a45
print("a" + 4 + 5); //獲得a45
若是想要進行運算就加括號,括號保證了運行順序,先進行加法運算,後進行字符鏈接。
print("a" + (4 + 5) ); //結果爲 a9
棧,函數中的局部變量;變量所屬區域運行完成,自動釋放;
堆:new出來的數組和方法;內存垃圾自動回收,不用程序員釋放;
public static void main ()
{
int[] arr = new int[3];
System.out.print(arr); //獲得 [I@1de17f4 ;這是arr地址
System.out.print(arr[0]); //輸出arr數組第一個元素
arr = null; //arr指向空,斷開鏈接堆鏈接,釋放了堆內存
}
程序運行過程:將main函數壓棧導入內存,而後運行到arr壓棧,arr有邊是堆,堆默認對值進行初始化,會有本身的起始地址,棧中的變量會引用這個地址找到堆中的存儲區。
面向過程,一步步執行完想要操做的動做;
面向過程,先建立一個對象,這個對象具備完成這些動做的特性,像上圖對象冰箱 能夠打開 存儲 關閉,調用對象來完成本身的需求;
用於描述事物:1是屬性(成員變量整個類能夠使用),2是行爲(成員函數);局部變量在一個局部中用
1,成員變量定義在類中,整個類中均可以訪問。
局部變量定義在函數,語句,局部代碼塊中,只在所屬的區域有效。
2 成員變量存在於堆內存的對象中。
局部變量存在於棧內存的方法中。
3 成員變量隨着對象的建立而存在,隨着對象的消失而消失。
局部變量隨着所屬區域的執行而存在,隨着所屬區域的結束而釋放。
4 成員變量都有默認初始化值。
局部變量沒有默認初始化值。
封裝是爲了將變量隱藏,起到保護做用;提供方法供外部試用,還有修改方便
class Person { private int age; //只有本類能夠使用,這樣就能夠加限制條件,防止誤操做 如輸入 -20 public static void setAge(int i) { if(i < 0 ) { //這樣就能夠限制範圍,防止誤操做了 System.out.println("輸入錯誤"); } else { age = i; } } public static void getAge() { return age; } public void speak() { System.out.println(age); } }
構造函數:構建創造對象時調用的函數。做用:能夠給對象進行初始化。構造函數能夠有多個,用於對不一樣的對象進行鍼對性的初始化。這也就是重載的概念。建立對象都必需要經過構造函數初始化,若是沒有定義過構造函數,那麼該類中會有一個默認的空參數構造函數。若是在類中定義了指定的構造函數,那麼類中的默認構造函數就沒有了。
通常函數和構造函數什麼區別呢?
構造函數:對象建立時,就會調用與之對應的構造函數,對對象進行初始化。
通常函數:對象建立後,須要函數功能時才調用。
構造函數:對象建立時,會調用只調用一次。
通常函數:對象建立後,能夠被調用屢次。
class Person { private String name; private int age; //定義一個Person類的構造函數。 Person()//構造函數,並且是空參數的。 { name = "baby"; age = 1; System.out.println("person run"); } } class test { public static void main(String[] args) { Person p = new Person(); //編譯運行後,會輸出 person run 由於構建函數,對象建立時調用 } }
1,當成員變量和局部變量同名時,能夠用this區別。
2,當構造函數中調用本類其餘構造函數時,能夠用this完成。
this從某個構造函數調用同一個類的另一個構造函數。this表明本類對象的引用,this()必須是第一行語句
super表明一個父類空間
class employee { private String name; private int age; employee(String name,int age) { this.name = name; //參數name賦給類的名字 this.age = age; //參數age賦給類的年齡 } } class gou { private int num = 4; gou() { //super(); 默認第一句是super(),調用父類的構造函數 System.out.println("默認構造函數"); } gou(int number) { //裏面默認的第一句話是 super(); 調用父類的構造函數 this(); //這個調用上面本類的構造函數 若是不寫的話 默認 super調用父類構造函數 num = number; System.out.println(num); } } class ce extends gou { public static void main(String[] args) { ce p = new ce(20); //編譯運行後,會輸出 默認構造函數 20 } }
static修飾的變量,類能夠直接訪問,在內存中分配一塊區域,供整個類通用,全部的類的對象都享有它的共同的值
class Test {
Static int i = 47;
}
Test t1 = new Test();
Test t2 = new Test();
t1,t2兩個對象的實例對象 i 共用一個內存 i = 47;
class StaticCode { static int num ; static //靜態代碼塊 { num = 10; System.out.println("this is static code"); } static void show() { System.out.println(num); } } class a { static { System.out.println("zhu stitic"); } public static void main(String[] args) { new StaticCode().show(); new StaticCode().show(); StaticCode.show(); } }
靜態代碼塊:隨着類的加載而執行。並且只執行一次
輸出結果爲:
zhu static //這個由於主函數先運行 this() 就會調用靜態代碼塊
this is static code //建立對象時應用 只引用一次
10
10
10
class StaticCode { static int num ; { //構造代碼塊 num = 10; System.out.println("this is static code"); } static void show() { System.out.println(num); } } class a { public static void main(String[] args) { new StaticCode().show(); new StaticCode().show(); StaticCode.show(); } }
輸出結果:
this is static code //建立對象時引用一次
10
this is static code //建立對象時引用一次
10
10 //沒建立對象因此沒有引用代碼塊
static的特色:
1,static是一個修飾符,用於修飾成員。
2,static修飾的成員被全部的對象所共享。
3,static優先於對象存在,由於static的成員隨着類的加載就已經存在了。
4,static修飾的成員多了一種調用方式,就能夠直接被類名所調用 。 類名.靜態成員 。
5,static修飾的數據是共享數據,對象中的存儲的是特有數據。
成員變量和靜態變量的區別?
1,兩個變量的生命週期不一樣。
成員變量隨着對象的建立而存在,隨着對象的被回收而釋放。
靜態變量隨着類的加載而存在,隨着類的消失而消失。
2,調用方式不一樣。
成員變量只能被對象調用。
靜態變量能夠被對象調用,還能夠被類名調用。
3,別名不一樣。
成員變量也稱爲實例變量。
靜態變量稱爲類變量。
4,數據存儲位置不一樣。
成員變量數據存儲在堆內存的對象中,因此也叫對象的特有數據.
靜態變量數據存儲在方法區(共享數據區)的靜態區,因此也叫對象的共享數據.
靜態使用的注意事項:
1,靜態方法只能訪問靜態成員。(非靜態既能夠訪問靜態,又能夠訪問非靜態)
2,靜態方法中不能夠使用this或者super關鍵字。
3,主函數是靜態的。
final定義的變量能夠看作一個常量,不能被改變;
final定義的方法不能被覆蓋;
final定義的類不能被繼承。
final static 就是再加上static的特性就能夠了
集合即容器,用來存放數據的,數組存放數據長度固定的數據。數據長度不固定的用集合。
集合包含兩個集合:collection接口,包含基本操做,添加、刪除、遍歷等,包含set(集)子接口,list(列表)子接口(ArrayList)
map(映射)接口: