java基礎學習筆記

燕子去了發表於2024-03-26
public class demo {
    public static void main(String[] args) {

    }
}

輸入

 Scanner sc = new Scanner(System.in);
 System.out.println("請輸入一個整數:");
 int i = sc.nextInt();

隨機數

Random r = new Random();
int number = r.nextInt(100);//生成隨機數0~99
System.out.println(number);

計算

System.out.println(2 + 2);       //4
System.out.println(3 - 2);
System.out.println(2 * 8);
小數

在程式碼中如果有小數參與,結果可能是不精確的、涉及小數在計算機中的儲存模式

System.out.println(1.1 + 1.01);   //2.1100000000000003
整數

參與計算結果只能得到整數

System.out.println(10 / 3);     //3
System.out.println(10 % 3);    //1
System.out.println(10.0 / 3);   //3.3333333333333335
隱式轉換

取值範圍小的和取值範圍大的進行運算,小的會先提升為大的再進行運算

byte-short-char在進行運算時都會直接先提升為int再進行運算

int a = 10;
double b = a;
System.out.println(b);
強制轉換
double c = 10.2;
int d = (int) c;
System.out.println(d);

byte e1 = 10;
byte e2 = 20;
byte e12 = (byte) (e1 + e2);
System.out.println(e12);    //byte取值範圍-128~127
System.out.println(1 + 99 + "年"+1+2);     //在加的過程中從左到右依次執行;只要有字串就開始拼接操作 100年12

當字元+字元 或者 字元+數字 時,會把字元透過ASCII碼錶查詢到相應的數字再進行計算

System.out.println(1 + 'a');  //98
System.out.println('a' + 'a');   //194
System.out.println('a' + "a");    //字元是單引號  aa
System.out.println('a' + "ab");    //aab
自增運算子自減運算子
//a++先用後加
int f = 10;
int f1 = f++;
System.out.println(f);   //11
System.out.println(f1);   //10

//++a先加後用
int g = 10;
int g1 = ++g;
System.out.println(g);   //11
System.out.println(g1);   //11

// +=,-=,*=,/=,%=自動強制型別轉換
short h = 1;
h += 1;
System.out.println(h);   //相當於s = (short)(s+1);()裡是看h是什麼型別的

關係運算子

==,!=,>=,<=,<,>結果都是boolean型別,結果是true或false

邏輯運算子

&都真才真,|都假才假,邏輯異或^相同為flase不同為true,邏輯非!取反

取反的感嘆號不要寫多次,要麼不寫要麼只寫一次

短路邏輯運算子 短路與&&短路或||,結果與&,|相同,但是有短路效果;如果左邊能確定最終結果,右邊不執行

System.out.println(true & true);  //true
System.out.println(true & false);   //false
System.out.println(true ^ true);   //false
System.out.println(!true);       //false
三元運算子

可以進行判斷,根據判斷結果得到不同內容

int i = 4;
int j = 6;
int ii = i > j ? i : j;
System.out.println(ii);
System.out.println(i > j ? i : j);

流程控制

if
int a = 6;
if (a > 2) {
	System.out.println("可以");
}
if (a < 2){
	System.out.println("可以");
}else{
	System.out.println("不可以");
}
if (a == 1){
	System.out.println("1");
}else if(a == 2){
	System.out.println("2");
}else{
	System.out.println("4");
}
switch

a可以是列舉可以是字串

case給出的值只能是字面量,不能是變數,不允許重複

switch(a){
	case 1:
		System.out.println("1");
		break;
	case 2:
		System.out.println("2");
		break;
	default :
        System.out.println("不是1和2");
        break;
}

這種情況只能{}中只有一個語句才能簡化,int a = 1是兩個語句,先定義a,後賦值1給a

switch(w){
    case 1,2,3,4,5 ->  System.out.println("工作日");
    case 6,7 -> System.out.println("休息日");
    default -> System.out.println("沒有這個星期");
}

迴圈

for
for(int i = 0;i <10;i++){
	System.out.println(i);
}

無限迴圈

for(;;){
    System.out.println();
}
while
int a = 1;
while (a <= 5){
    System.out.println(a);
    a++;
}

無限迴圈

while(true){
	System.out.println();
}
do while 迴圈

至少迴圈一次,先執行後判斷

int c = 1;
do{
    System.out.println(c);
    c+=1;
    System.out.println(c);
}while(c<=3);         // 12 23 34

無限迴圈

do{
    System.out.println()
}while(true);
continue
for (int i = 1; i <= 5; i++){
    if(i == 3){
        continue;//結束本次迴圈繼續下一次迴圈
    }
    System.out.println(i);
}
//1245
break
for (int i = 1; i <= 5; i++){
    System.out.println(i);
    if(i == 3){
        break;//結束整個迴圈
    }
    System.out.println(i);
}
//11223

陣列

int[] array = new int[]{11, 22, 33, 44, 55,};
double[] array2 = new double[]{11.1, 22.2, 33.3,11};  //11.0

陣列的地址值

System.out.println(array);
System.out.println(array2);//[D@4eec7777 [表示是一個陣列,D,表示是double型別,@固定格式,4eec7777地址值,16進位制

索引

array[1]

修改

array[0] = 12;

遍歷

將陣列中的所有資料取出來,取出來後可以列印,求和,判斷......

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

動態初始化

只指定陣列長度,由系統為陣列分配初始化值

int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
System.out.println(arr[0]);   // 1
System.out.println(arr[1]);   // 2
System.out.println(arr[2]);   // 0

存引用資料型別

User u1 = new User("xiaohong",23)
User[] userArr = new User[1];
userArr[0] = u1;

方法

public static void main(String[] args) {
    //呼叫方法
    //直接呼叫
    getSum(10,20);//實參
    print();
    //賦值呼叫
    int sum = getSum(10,20);
    int sum2 = getSum(60,90);
    System.out.println(sum);
    System.out.println(sum2);
    //輸出呼叫
    System.out.println(getSum(10,20));
    System.out.println(getSum(10,20.0));
    return;//表示結束方法,這句話下面的程式碼屬於無效程式碼
}

//定義方法
public static void print() {
    System.out.println("最簡單的方法");
    return;//可省略
}
public static int getSum(int num1,int num2) {      //返回值型別,void表示方法沒有返回值,形參
    int result = num1 +num2;
    return result;
    //看到方法進入方法,執行完畢回到呼叫出
}
public static double getSum(int num1,double num2){   //過載
    double result = num1 +num2;
    return result;
}

字串

建立

String a = "abcd";
System.out.println(a);                //abcd

String a2 = new String();
System.out.println("@" + a2 + "@");         //@@

String a3 = new String("a3");
System.out.println(a3);                //a3

根據字元陣列建立新的字串,可以改字串指定位置

char[] chs = new char[]{'a', 'b', 'c'};
String a4 = new String(chs);
System.out.println(a4);           //abc

位元組,網路當中傳遞的一般是位元組資訊。可以轉化為字串

byte[] bytes = new byte[]{97, 98, 99, 100};
String a5 = new String(bytes);
System.out.println(a5);            //abcd

比較

boolean result = a.equals(a5);
System.out.println(result);              //true
System.out.println(a == a5);           //false
String a6 = "ABCD";
boolean result2 = a.equalsIgnoreCase(a6); // 不考慮大小寫
System.out.println(result2);            //true

遍歷

for (int i = 0; i < a6.length(); i++) {
    char c = a6.charAt(i);
    System.out.println(c);
}                 //ABCD

統計字元個數

String a7 = "1uasdh1982JEHADKUi";
int bigcount = 0;
int smallcount = 0;
int numbercount = 0;
for (int i = 0; i < a7.length(); i++) {   //字串長度是方法,要加小括號
    char c = a7.charAt(i);                //字串索引
    if (c >= 'a' && c <= 'z') {
        smallcount++;
    }else if(c >= 'A' && c <= 'Z'){
        bigcount++;
    }else if(c >= '0' && c <= '9'){
        numbercount++;
    }
}
System.out.println(smallcount + ","+ bigcount+","+numbercount);   //6,7,5

擷取

String phoneNumber = "18834567890";
String start3 = phoneNumber.substring(0,3);
String end4 = phoneNumber.substring(7);
System.out.println(start3+"****"+end4);       //188****7890

替換

String a8 = "很好, TMD,CNM";
String[] arrr = {"TMD", "CNM","WC"};
for(int i = 0;i<arrr.length;i++){
    a8 = a8.replace(arrr[i],"***");
}
System.out.println(a8);               //很好, ***,***

字串轉化為陣列

String a9 = "dsfsd";
char[] arr = a9.toCharArray();
System.out.println(arr);           //dsfsd
System.out.println(arr[0]);       //d

stringBuilder

StringBuilder sb = new StringBuilder("");                       //可以是空參,不含有任何內容
for(int i = 0;i<=3;i++){
    sb.append(3).append("d").append('s').append(true).append(2.3);    //新增資料並返回物件本身,什麼型別都可以
}
System.out.println(sb);             //列印物件是屬性值3dstrue2.33dstrue2.33dstrue2.33dstrue2.3

StringBuilder的"capacity"是指它內部緩衝區的大小,用於儲存構建字串所需的字元。當字串操作導致需要更多的儲存空間時,StringBuilder會自動增加其容量,以適應新的字元。

反轉sb.reverse()

System.out.println(sb.reverse());   //3.2eurtsd33.2eurtsd33.2eurtsd33.2eurtsd3
// 用了之後sb就變了
System.out.println(sb);            //3.2eurtsd33.2eurtsd33.2eurtsd33.2eurtsd3

返回長度

int length = sb.length();
System.out.println(length);          //40
System.out.println(sb.length());     //40

把Stringbuilder轉換為String

String s = sb.toString();
System.out.println(s);        //3.2eurtsd33.2eurtsd33.2eurtsd33.2eurtsd3
char c = s.charAt(1);
System.out.println(c);        //.

因為Stringbuilder是java已經寫好的類,java在底層給他做了一些特殊處理,列印物件不是地址值而是屬性值。

String str = "abc";
String result = new StringBuilder().append(str).reverse().toString();
System.out.println(result);         //cba

stringJoiner

jdk8才出現,也是一個容器,建立之後裡面的內容是可以改變的

 StringJoiner sj = new StringJoiner(",","(",")");
 sj.add("a").add("b").add("c");
 System.out.println(sj);           //(a,b,c)
 int len = sj.length();
 System.out.println(len);            //7
 String result = sj.toString();
 System.out.println(result);       //(a,b,c)

基本資料型別和引用資料型別

main方法進棧後基本資料型別直接跟著進去,方法執行完出棧

引用資料型別在堆裡開闢空間;此時main裡:String s = 堆裡的地址值

相關文章