java 數據類型和堆棧 類

一篇簡單的文章做爲本身轉型的開始,之後由嵌入式開發轉向安卓app開發java

javaee企業版程序員

javase 標準板,作桌面應用程序數組

javame小型版,針對小產品,好比手機(這個已經不用了,如今用的是安卓)app

java輸出

System.out.print(a);
函數

print只是輸出‘字符’和「字符串」和 變量 this

print('a'+1) 變爲輸出 98 ‘a'的ASCII爲97。print(’你‘+1);由於漢字也是存放表中spa

java不一樣數據類型運算注意事項

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);

{

}


java字符串鏈接做用 

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有邊是堆,堆默認對值進行初始化,會有本身的起始地址,棧中的變量會引用這個地址找到堆中的存儲區。

面向過程與面向對象區別

面向過程,一步步執行完想要操做的動做;

面向過程,先建立一個對象,這個對象具備完成這些動做的特性,像上圖對象冰箱 能夠打開 存儲 關閉,調用對象來完成本身的需求;

java類 

用於描述事物: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 由於構建函數,對象建立時調用
    }
}

this

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 

static修飾的變量,類能夠直接訪問,在內存中分配一塊區域,供整個類通用,全部的類的對象都享有它的共同的值

class  Test { 
Static int i = 47; 
}

Test t1 = new Test();

Test t2 = new Test();

t1,t2兩個對象的實例對象 i 共用一個內存 i = 47;

static靜態代碼塊

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定義的類不能被繼承。

final static 就是再加上static的特性就能夠了


集合類

集合即容器,用來存放數據的,數組存放數據長度固定的數據。數據長度不固定的用集合。

集合包含兩個集合:collection接口,包含基本操做,添加、刪除、遍歷等,包含set(集)子接口,list(列表)子接口(ArrayList)

map(映射)接口:

相關文章
相關標籤/搜索