第3章基本程序设计结构(java知识点笔记)
javac JDK;
jdk-->x.java--->x.class;
JRE-->x.class--->翻譯給操作系統(tǒng)。
例如:命令javac Test.java就是按照上述操作順序編譯出Test.class;然后用Java Test翻譯Test.class文件給操作系統(tǒng)
Java SE是最原始的Java功能;Java EE是Java用于網(wǎng)站方面的開發(fā);JavaME是Java用于安卓方面的開發(fā)。
類(class)用大駝峰命名法,首字母大寫,小駝峰命名法,首字母要小寫,其他的大寫常用語文件名、變量名和方法名。
數(shù)據(jù)類型:
整型
int 32bit;short 16bit;long 64bit;byte 8bit
取值范圍
int:-2^31~2^31-1
short:-2^15~2^15-1
浮點(diǎn)型
float 類型的有效位是6、7位,有效位是從第一個(gè)不為0的數(shù)開始,往后的都是有效位
由此可以看出,float類型的數(shù)精度并不是很高。當(dāng)data趨于0是精度越高,反之精度越低,呈現(xiàn)指數(shù)級(jí)下降。雖然int和float類型都占32位,但是不能說float類型的精度就比int類型高。
char-根據(jù)編碼決定 Unicode/GBK 16bit UTF-8 16-32bit
boolean-32bit ----boolean類型有兩個(gè)值TRUE和FALSE,用來判斷邏輯條件,同時(shí)整型值和布爾值之間不可以相互轉(zhuǎn)化。
進(jìn)制在計(jì)算機(jī)中的編寫形式:
int y1=ob1101010二進(jìn)制;
inty1=074556 八進(jìn)制;
int y3=oxad5659十六進(jìn)制;
進(jìn)制轉(zhuǎn)換:
1、十進(jìn)制轉(zhuǎn)m進(jìn)制,就是除m求余,直到商為0.
2、N進(jìn)制1后面有幾個(gè)0就是N^m:
int 456 = 256+128+64+8 =11101000;
float 1 : 8 : 23
??? 0 ? ???????? 00000000 ? ? ?? 00000000000000000000000
符號(hào)位??? ??????? 階碼 x ?????????????????????? 數(shù)值y
計(jì)算公式:float(2^(x-127))*y
double 1:11:52 (2^(x-1024))*y
所有的編碼都是ASCII編碼,ASCII編碼在其他編碼中數(shù)值是不變的,但是所占的位數(shù)是不同在ASCII中占8位,在Unicode中就占16位。
碼點(diǎn):是指一個(gè)編碼表中某個(gè)字符對(duì)應(yīng)的代碼值
代碼單元:存儲(chǔ)單位16bit,每個(gè)字符用16位表示
高速緩存的基準(zhǔn)單元是64B,每個(gè)緩存行都有一個(gè)主線相連。
在Java中聲明的數(shù)據(jù)要大一點(diǎn),增大boolean減少排隊(duì)數(shù)據(jù)的個(gè)數(shù),減少堵塞概率。
變量:
除了8大基本類型其余的都是引用類型,基本類型的數(shù)組,也是引用類型(基本類型和引用類型的區(qū)別在后面會(huì)寫到)
常量:
在Java中利用final來指示常量,表示這個(gè)變量只能被賦值一次,一旦被賦值就無法修改;常量名使用全大寫。
重點(diǎn):final的作用
1、final m1=90;定義的常量,且不可以修改
2、final修飾的類不可被繼承
3、final修飾的方法不可以被重寫
4、final防止多程序下的指令重排序,保障線程的安全
使用Math類中的方法
1、Math.方法
2、在文件的開頭加上
import static java.lang.Math.*;就可以直接使用Math類中的方法。
常見的Math類中的方法:
?Math.sqrt() 根號(hào)
Math.pow(x,a);x^a
強(qiáng)制類型轉(zhuǎn)換:
int x2=20000000000; byte b1 =(byte)x2;結(jié)果只會(huì)保留最右側(cè)的位數(shù),左側(cè)的位數(shù)都會(huì)舍棄,導(dǎo)致精度大程度降低。
二進(jìn)制移位:
int b=a<<3;//a*2^3 int c=b<<3;//b/2^3; int c=a>b?10:20;//如果a>b成立c=10,否則c=20自增:
int m=7;
int a=2*++m;//現(xiàn)在a=16,m=8
int b=2*m++;//b=14,m=8
三元操作符:
?:
x<y?x:y;//如果x<y則x否則y
字符串:
new
new:表示的是重新開辟一個(gè)新的空間
String a =new String("aaa");
---------
String a =“aaaa";
String b =“aaaa";
a==b;//為TRUE,因?yàn)樗麄円玫氖峭粋€(gè)地址的值
String c =new String("aaa");
String d =new String("aaa");
c==d;//為FALSE,因?yàn)閚ew是新開辟的空間,所以c和d 的引用地址是不同的。
1、獲取子串
substring()方法
String aa="dashsjdhaus"; String b=aa.substring(2,4);//前閉后開[2,4)2、32、拼接
String expletive = "Expletive"; String PC13 = "deleted"; String message = expletive + PC13; // String all = String.join("/","s","m");3、不可變字符串:
不能再原地址上修改,是因?yàn)樵刂房臻g是固定的,如果后來的數(shù)據(jù)可能過大。修改完之后,原地址的數(shù)據(jù)就會(huì)被拋棄;實(shí)際上是被標(biāo)記為無效,等下一次使用該地址時(shí)直接被覆蓋。
4、檢測字符串是否相等
引用類型==引用類型 表示兩個(gè)引用類型,引用的地址是同一個(gè)地址的數(shù)據(jù),是同一個(gè)就返回TRUE,不是返回FALSE
a、c為兩個(gè)字符串(引用類型)a==c比較的是兩個(gè)字符串所存儲(chǔ)的地址是否相同,a.equals(c)是比較兩個(gè)值是否相等。
使用equals()方法判斷字符串是否相等
“hello”.equals("hello"); “hello”.equalslgnoreCase("hello");//不區(qū)分大小寫空串和Null串
Strring a=“”;//空串
String b =Null;//Null串
判斷一個(gè)字符串既不是空串也不是null串
if(str != null && str.length() !=0);
字符串的其他方法
char x=a.charAt(int index);//獲取指定索引位置的字符
int x2=a.codePointAt(int index);//獲取指定索引位置的編碼值
boolear? x3 =a.startsWith(String prefix);//字符串a(chǎn)是否以? 開頭,是返回TRUE
int x4=a.indexOf("字符串");//包含字符串,返回索引值>0,不包含返回-1;
st1 =a.replace("sd","=");//用“=”替換a中的“sd”。
String[] arr=a.split("s");//用字符s對(duì)a字符串進(jìn)行切割,返回?cái)?shù)組
int all =a.lenth();//返回?cái)?shù)組a 的長度
{long start=System.currentTimeMillis();//獲取當(dāng)前毫秒數(shù)
long end=System.currentTimeMillis();//獲取當(dāng)前毫秒數(shù)
num= (end - start);//返回花費(fèi)的毫秒數(shù)}
StringBuilder b=new StringBuilder();
for(int i= 0;i<1000;i++){b.append(" "+i);}//因?yàn)閎是StringBuilder類型的字符,花費(fèi)時(shí)間很小。
char b1=a.charAt();//獲取指定位置的字符int b2=a.codePointAt();//獲取指定字符的編碼boolean b3=a.startsWith("");//是否以該字母開頭boolean b3=a.endsWith("");//是否以該字母結(jié)尾int indexOf("");//是否包含該字符串st1 = st1.replace("ad","+");//替換String[] arr = st1.split("");//分裂 for(String s:arr){ System.out.println(s); }int l1=st1.length();//記錄字符長度String a="";StringBuilder b =new StringBuilder();long start=System.currentTimeMillis();for(int i=0;i<10000;i++){//a +=1;b.append("" + i); }String b=b.toString();long endtime=System.currentTimeMillis();System.out.println("總花費(fèi)時(shí)間是:"+(endtime - start)+"毫秒數(shù)"); b.append(""+i);//拼接功能5、String,StringBuilder,StringBuffer的區(qū)別
String aa=new String aa();//一個(gè)字符占一頁
StringBuilder aa=new StringBuilder aa();//一開始申請(qǐng)的空間很大,不需要換頁存儲(chǔ),運(yùn)行速度快。
StringBulider和StringBuffer分配空間的方式是一樣的,不同的是StringBuffer是內(nèi)部加鎖,在多線程下是安全的,StringBuiilder在多線程下是不安全的。
輸入輸出:
1、讀取輸入
System in = new Scanner(System.in);
int num = in.nextInt();//輸入?yún)?shù),這句話在代碼中出現(xiàn)幾次,就會(huì)等待輸入幾次
import java.uitl.*;//這是運(yùn)行Arrays類的前提 .... System.out.println("請(qǐng)輸入數(shù)組大小"); Scanner aaa=new Scanner(System.in); int num = aaa.nextInt(); int[] arr=new int[num]; System.ouy.println("請(qǐng)向數(shù)組中添加數(shù)據(jù)");for(int i=0;i<num;i++){arr[i]=aaa.nextInt(); } System.out.println(Arrays.toString(arr));2、格式化輸出
System.out.print(x);直接輸出x;
System.out.printf("%8.2f",x);打印出用8個(gè)字符的寬度和小數(shù)點(diǎn)等候兩個(gè)字符的精度的x。
在printf中可以打印多個(gè)參數(shù),
?Switch循環(huán)語句:
Scanner in =new Scanner(System.in); int choice=in.nextInt(); Switch(choice) {case 1:....;break; case 2:....;break; case 3:....;break; default :System.out.println();return; }每一個(gè)case要對(duì)應(yīng)一個(gè)break否則就會(huì)直接執(zhí)行下一個(gè)case,引發(fā)錯(cuò)誤。
設(shè)計(jì)一個(gè)計(jì)算器
public class Test{ public static void main(String[] aaaa){System.out.println("歡迎使用百望山計(jì)算器,請(qǐng)選擇計(jì)算類型數(shù)字:");System.out.println("1-加法: 2-減法: 3-乘法: 4-除法:");System.out.println("請(qǐng)輸入計(jì)算類型:");Scanner aa= new Scanner(System.in);int flagtype =aa.nextInt();switch(flagtype){case 1:System.out.println("您選擇的是加法計(jì)算:");break;case 2:System.out.println("您選擇的是減法計(jì)算:");break;case 3:System.out.println("您選擇的是乘法法計(jì)算:");break;case 4:System.out.println("您選擇的是除法法計(jì)算:");break;default:System.out.println("您選擇的是非法計(jì)算,請(qǐng)重新開始:");break;}System.out.println("請(qǐng)輸入要計(jì)算的兩個(gè)數(shù)字:");int num1=aa.nextInt();int num2=aa.nextInt();System.out.println("新輸入的兩個(gè)數(shù)字是:" + num1 +","+num2);if(flagtype ==1){System.out.println("最終的計(jì)算結(jié)果是:" + (num1 + num2));}else if(flagtype ==2){System.out.println("最終的計(jì)算結(jié)果是:" + (num1 - num2));}else if(flagtype ==3){System.out.println("最終的計(jì)算結(jié)果是:" + (num1 * num2));}else {System.out.println("最終的計(jì)算結(jié)果是:" + (num1 / num2));}}} }for each 循環(huán)
for (variable : collection) statement
collectiom這一集合表達(dá)式必須是一個(gè)數(shù)組或者是一個(gè)實(shí)現(xiàn)Iterable接口的類對(duì)象
?
大數(shù)值:
java.math包中有兩個(gè)很有用的類BigInteger和BigDecima;BigInteger實(shí)現(xiàn)任意精度的整數(shù)運(yùn)算;BigDecimal實(shí)現(xiàn)任意精度的浮點(diǎn)數(shù)運(yùn)算。
使用靜態(tài)的valueOf方法可以將普通的數(shù)值轉(zhuǎn)換為大數(shù)值,
BigInteger a=BigInteger.valueOf(100);
BigInteger c=a.add(b);//c=a+b;
BigInteger d=c.multiply(b.add(BigInteger.valueOf(2)));//c*(b+2)
BigDecimal同BigInteger用法一樣
數(shù)組:
int num=90;
int[] arr=new int[num];//數(shù)組上來就要確定數(shù)組的大小
1、匿名數(shù)組
new int[]{7,8,9};//初始化一個(gè)匿名數(shù)組
smallPrimes=new int[]{7,8,9};
2、Arrays類的使用
import java.util.*;?或者
引用類型數(shù)組,復(fù)制數(shù)組使用Arrays.copy();
算法中常使用的排序函數(shù)Arrays.sort();
總結(jié)
以上是生活随笔為你收集整理的第3章基本程序设计结构(java知识点笔记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java m个苹果n个篮子_m个苹果放在
- 下一篇: 练习7-9 计算天数(15 分)