1 基礎資料結構
在JAVA程式執行過程中一直不會改變的量稱為常量。
有的資料值是不固定的,總在變,我們還需要記錄這些值,我們可以把這些值理解為變數。
在java中資料型別分為兩類:基本資料型別和引用型別。
1.1 基本資料型別
基本資料型別總共有8種:
基本資料型別的取值範圍:
/* 整數型:byte 1位元組
* short 2
* int 4
* long 8
*浮點型:float 4
* double 8
*字元: char 2
*布林值:boolean 1
*/
//整數型測試 byte short int long
byte max = Byte.MAX_VALUE;
byte min = Byte.MIN_VALUE;
System.out.println(max);//127 2e7
System.out.println(min);//-128
short smax = Short.MAX_VALUE;
short smin = Short.MIN_VALUE;
System.out.println(smax);//32767 2e15
System.out.println(smin);//-32768
//int--integer
int imax = Integer.MAX_VALUE;
int imin = Integer.MIN_VALUE;
System.out.println(imax);//2147483647 2e31
System.out.println(imin);//-2147483648
long lmax = Long.MAX_VALUE;
long lmin = Long.MIN_VALUE;
System.out.println(lmax);//9223372036854775807 2e63
System.out.println(lmin);//-9223372036854775808
//浮點型測試 float double
float fmax = Float.MAX_VALUE;
float fmin = Float.MIN_NORMAL;
System.out.println(fmax);//3.4028235E38 8位有效數字
System.out.println(fmin);//1.17549435E-38
double dmax = Double.MAX_VALUE;
double dmin = Double.MIN_NORMAL;
System.out.println(dmax);//1.7976931348623157E308 16位有效數字
System.out.println(dmin);//2.2250738585072014E-308
//char測試
char c = 'a';//可以存一個字元''
char c1 = '1';
char c2 = '在';//可以存一個漢字
char c3 = 18;//可以存一個數字,會檢視ASCII表(0-127有對應)進行列印,區間0-65535
System.out.println(c);
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
1.2 資料的字面值
整數型別的字面值:int型別
//byte,short,char三種比int小的整數可以用範圍內的值直接賦值
byte b=120;//對
int a = 999999999;//錯,右側是int型別,但是超出範圍
long a = 999999999l;//對~~~~
所有的整數型別的資料都是整型:例如 20 05 0x12 0X12 0b10 0B10
八進位制以0開頭:例如 05
十六進位制以0x或0X開頭:例如 0x12 0X12
二進位制使用0b或0B開頭:例如 0b10 0B10
浮點數的字面值是:double型別
double a=3.14;//對
float a=3.14;//錯,右面是double,float是四位元組double是八位元組存不下
布林值的字面值是:true或false
1.3 基本型別的型別轉化
1.3.1 隱式轉化(小轉大)
沿著箭頭所指的方向可以直接轉化
1.3.2 顯示轉化(大轉小)
如果大型別的值轉為小型別的值時需要強制型別轉換。
int xx = 356;
byte y=(byte) xx;
如果大型別的值在小型別的取值範圍內可以直接轉換。
注意:小數轉成整數,小數直接捨棄
1.4 運算規則
運算時會先轉化為最大型別進行運算
byte a=3;
byte b=4;
byte c=a+b;//錯,執行時,byte會先自動轉成int再運算,int+int還是int
int c=a+b;//對
運算結果輸出也為最大型別
System.out.println(15/7);//2,結果是int型別
System.out.println(15d/7);//2.142857142857143,相當於double/int,結果是double型別~~~~
整數運算溢位
整數運算,如果運算結果超出資料型別取值範圍,則會溢位,從最小範圍再開始統計。
System.out.println(300000000*60*60*24*365);//659193856
System.out.println(300000000l*60*60*24*365);//9460800000000000
浮點數運算不精確
可使用BigDecimal工具類:用來解決精確的浮點數運算。
System.out.println(3-1.2);//1.8
System.out.println(3*1.1);//3.3000000000000003
浮點數的特殊值
Infinity 無窮大 3.14/0
Nan not a number 0/0.
2 運算子
自增自減的練習
int a = 1 ;
//符號在後,先使用後變化
System.out.println(a++);//1,a=2
int b = 1 ;
//符號在前,先變化後使用
System.out.println(++b);//2
int c = 1;
//符號在前,先變化後使用
System.out.println(--c);//0
int d = 1;
//符號在後,先使用後變化
System.out.println(d--);//1
//TODO
System.out.println(++a+b+a++);//3+2+3=8
System.out.println(--d-d-c--);//-1-(-1)-0=0
判斷平閏年的聯絡
public static void main(String[] args) {
System.out.println("請輸入年份進行測試");
int year = new Scanner(System.in).nextInt();
/*
* 平年和閏年的三種判斷方bai法:
*①、普通年都能被4整除且不能被100整除的為閏年。
*②、世紀年能被400整除的是閏年。否則為平年。(如2000年是閏年,1900年不是閏年)
*③、對於數值很大的年份,這年如果能整除3200,並且能整除172800則是閏年。否則為平年。
*/
String a = "平年";
if((year%4==0 && year%100!=0) || year%400==0 ) {
a="閏年";
}
System.out.println(year+"是"+a);
}
3 分支和迴圈結構
3.1 分支結構
對於要先做判斷再選擇的問題就要使用分支結構。
3.1.1 分支結構(if)
單分支:
if(判斷條件){
滿足條件的程式碼
}
多分支:
if(判斷條件){
滿足條件的程式碼
}else{
不滿足條件的程式碼
}
巢狀分支:
if(判斷條件1){
滿足條件1的程式碼1
}else if(判斷條件2){
滿足條件2的程式碼2
}else if(判斷條件3){
滿足條件3的程式碼3
}else{
以上誰都不滿足來這兒
}
3.1.2 分支結構(switch)
概述:當一個case成立,從這個case向後穿透所有case,包括default,直到程式結束或者遇到break程式才結束。
public static void main(String[] args) {
int a = 3;
//a可以是int基本型別或Integer包裝型別,可支援5中型別,byte,short,int,char,JDK1.5後的string;
switch (a) {
case 1 :System.out.println(2);
case 2 :System.out.println(3);
case 3 :System.out.println(4);break;
case 4 :System.out.println(5);
default:System.out.println(6);
}
//1.當成功匹配case,會執行後面程式碼,並會穿透後續所有case和default;
//2.當遇到break,終止switch分支;
//3.沒有遇到任務滿足條件的case,只會執行default;
}
3.2 迴圈結構
迴圈結構是指在程式中需要反覆執行某個功能而設定的一種程式結構。
它由迴圈體中的條件,判斷繼續執行某個功能還是退出迴圈。
根據判斷條件,迴圈結構又可細分為先判斷後執行的迴圈結構和先執行後判斷的迴圈結構。
3.2.1 迴圈結構(for)
迴圈次數已知的情況下可使可優先考慮使用for迴圈
fori迴圈:
for(開始條件;迴圈條件;更改條件){
迴圈體程式碼…
}
foreach迴圈(增強for迴圈):
for(元素型別 元素名稱:遍歷陣列(集合)){
迴圈體程式碼
}
迴圈的順序:
3.2.1 迴圈結構(while和do...while)
當迴圈次數不確定時使用:
while:先判斷,不符合規則,不執行程式碼
do while:程式碼最少被執行一次,再去判斷,符合規則,再次執行程式碼
先判斷後執行:
while(迴圈的判斷條件){
迴圈體
}
先執行後判斷:
do{
迴圈體
}while(迴圈的判斷條件);
4 陣列
陣列Array是用於儲存多個相同型別資料的集合。
想要獲取陣列中的元素值,可以透過元素的下標來獲取,下標是從0開始的。
4.1 陣列的建立
陣列一旦建立,長度不可變,允許建立長度為0的陣列。
靜態建立陣列
//靜態儲存
char[] a =new char[] {'h','e','l','l','o'};
char[] a1={'h','e','l','l','o'};//簡寫形式
動態建立陣列
//動態儲存
char[] a2=new char[5];
a2[0]='h';
a2[1]='e';
a2[2]='l';
a2[3]='l';
a2[4]='o';
4.2 陣列的工具類
Arrays.copy0f(複製的陣列名,長度值)
Arrays.sort(陣列名) 排序方法
Arrays.toString(陣列名) 陣列的展示
public static void main(String[] args) {
//建立一個10位無序陣列;
int a[]=new int[10];
for(int i=0;i<a.length;i++) {
a[i]=new Random().nextInt(100);
}
//Arrays.copy0f(複製的陣列名,長度值),長度數大於10擴容,小於10縮容
int b[]=Arrays.copyOf(a, 11);
System.out.println(Arrays.toString(b));
//Arrays.sort排序方法
Arrays.sort(a);
//Arrays.toString(a),陣列的展示
System.out.println(Arrays.toString(a));
}
4.3 簡單的演算法
氣泡排序:
public static void method(int[] a) {
//進行氣泡排序
for(int i =0;i<a.length-1;i++) {//外迴圈,比較大小,控制比較輪數,n輪,比較n-1次
for(int j =0;j<a.length-(1+i);j++) {//內迴圈,比較大小
if(a[j]>a[j+1]) {//相鄰比較
//交換數值
int c =a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
}