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 = 堆裡的地址值