環境配置
JAVA_HOME:jdk的路徑(jdk下載網址:http://www.oracle.com)
Path:要把jdk的目錄路徑,添加到path變量java
java的運行工做原理
java源代碼文件(.java)-->java字節碼文件(.class)-->運行結果
.java-->.class:編譯期(經過javac命令將java的源文件編譯爲字節碼文件)
.class-->運行結果:運行期(先啓動java虛擬機,不一樣的操做系統有不一樣的jvm,所以java跨平臺,再經過JVM加載.class字節碼文件,並加載main方法執行程序)數組
jdk jre jvm 的關係
jdk(開發工具包):Java Development Kit 是針對java開發員的產品,是整個Java的核心,包括了Java運行環境JRE,java工具和java基礎類庫。
jre(運行環境):Java Runtime Envirment Kit是針對運行JAVA的運行環境,包含JVM和java的核心類庫。
jvm(Java虛擬機):java Virtual Machine,java虛擬機的縮寫,是整個java實現跨平臺的最核心的部分,可以運行以java語言寫做的軟件程序。
jdk有不一樣系統的版本,因此jdk是跨平臺的oracle
java的一次編寫,到處執行是怎樣實現的?
java程序會被編譯成字節碼組成的class文件,這些字節碼能夠運行在任何平臺,所以java是平臺獨立的.dom
標識符
由字母,數字,下劃線(_),$組成,不能有空格和其餘字符,以及不能出現關鍵字.
不能由數字開頭
嚴格區分大小寫
見名知意jvm
八種數據基本類型
byte(1),short(2),int(4),long(8),float(4),double(8),char(2),boolean(1)工具
練習1(輸入我的信息): public class Test1{ public static void main(String[] args){ System.out.println("姓名:"); String name = new Scanner(System.in).nextLine(); System.out.println("性別:"); String sex = new Scanner(System.in).nextLine(); System.out.println("年紀:"); int age = new Scanner(System.in).nextInt(); System.out.println("您輸入的我的信息是:"); System.out.println("姓名:"); System.out.println("性別:"); System.out.println("年紀:"); } }
練習2(圓的面積): public class Test2{ System.out.println("請輸入圓的半徑:"); double r = new Scanner(System.in).nextDouble(); System.out.println(3.14*r*r); }
練習3(變量的交換): public class Test3{ System.out.println("請輸入變量a:"); int a = new Scanner(System.in).nextInt(); System.out.println("請輸入變量b:"); int b = new Scanner(System.in).nextInt(); int t = a; a = b; b = t; System.out.println(a); System.out.println(b); }
引用類型
引用類型是一個對象類型,其值是指向內存空間的引用,就是地址.開發工具
基本類型字面值規則
整數字面值是int(4)類型,若是值超出int範圍,則須要作轉型處理.
byte(1),short(2),char(2)三種比int小的整數,在自身範圍內能夠直接賦值.
浮點數字面值時double;浮點數轉成整數會直接捨棄小數點後6位.
字面值後綴:L,D,F
字面值前綴:二進制(0b);16進制(0x);8進制(0);char類型16進制(uui
基本類型的類型轉換
計算結果的類型與運算中的最大類型保持一致
byte(1),short(2),char(2)三種比int小的整數,計算時會自動轉爲int.
有long類型時,都會轉爲long類型.
char類型相加,提高爲int類型.
整數運算溢出:能夠添加後綴;
浮點數運算不精確的解決方法:
1.直接去除整數;
2.四捨五入(Math.round());
3.向上取整(Math.floor());
4.向下取整(Math.ceil());
5.StringBuffer,StringBuilder操作系統
基本類型之間的轉換
數字類型之間能夠互相轉換,從小到大自動轉換,從大到小須要強制轉型.
byte-->short-->int-->long
char-->int
int-->float/double/longcode
小轉大:隱式轉換 int a = 9; long b = a;
大轉小:顯式轉換 int x = 10; byte b =(byte)x;
運算符
&:短路與,a&b,a與b同時爲真時結果才爲真,有一個爲false均爲false.無論左邊是什麼結果都要繼續執行右邊
&&:邏輯與,有一個爲假即爲假,再也不繼續判斷,左邊是假,右邊忽略不執行.直接判斷爲真
|:短路或,a|b,a與b中有一個爲真即爲真,無論左邊是什麼結果都要繼續執行右邊.
||:邏輯或,有一個爲真即爲真即爲真,再也不繼續判斷.左邊是真,右邊忽略不執行,直接判斷爲真.
流程控制
switch:jdk1.7以前只能判斷byte,short,char,int,以後能夠判斷string.從成立的case無條件的穿透全部的case包括default直到結束,或者是遇到break,若是全部的條件都不成立的話就執行case.
switch(變量或表達式){ case1: case2: case3: default; }
練習1:數字匹配 public class Test{ public static void main(String[] args){ int i = 3; switch(i){ case1: System.out.println("1"); break; case2: System.out.println("2"); break; case3: System.out.println("3"); break; default: System.out.println("default"); } } } break:中 斷,跳出循環 countine:結束本輪循環進入下一輪循環
for循環:
for(變量賦值;執行條件;變量修改){ 代碼 }
練習1:打印正方形 for(int i = 1;i<5;i++){ for(int j=1l;j<5;j++){ System.out.println("*"); } System.out.println(); }
練習2:打印倒三角 for(int i = 5;i>1;i--){ for(int j = 0;j<i;j++){ System.out.print("*"); } System.out.print(); }
練習3:打印99乘法表 public class Test3{ public static void main(String[] args){ test(); } private static void test(){ for(int i = 1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.println(i+"*"+j+"="+i*j+" "); } System.out.println(); } } }
if分支
單分支: if(判斷條件){ 代碼 }
多分支: if(判斷條件){ 代碼1 }else{ 代碼2 }
嵌套分支: if(判斷條件1){ 代碼1 }else if(判斷條件2){ 代碼2 }else if{判斷條件3}{ 代碼3 }else{ 代碼4 }
練習1:輸入年號,判斷平年閏年 public class Test1{ public static void main(String[] args){ System.out.println("年號:"); int y = new Scanner(Syetem.in).nextInt(); String r = "平年"; if(y%4==0){ if(y%100!=0){ r="閏年"; } } if(y%400==0){ r="閏年"; } }
練習2:商品打折 接收輸入的原價,滿1000打9折,滿2000打8折,滿5000打5折. public class test2{ public static void main(String[] args){ System.out.println("輸入總原價"); double price = new Scanner(System.in).nextDouble(); double nowprice = f(price); System.out.println(nowprice); } public static double f(double p){ if(p>5000){ p=p*0.5; }else if(p>2000){ p=p*0.8; }else if(p>1000){ p=p*0.9; }else{ p=p; } return p; }
練習3:統計學員得分 >90:優秀 80-90:良好 70-80:中等 60-70:及格 <60:不及格 public class test3{ public static void main(String[] args){ double score = new Scanner(System.in).nextDouble(); if(score>=100||score<=0){ System.out.println("請輸入0-100範圍內的數"); } if(score>=90 && score<=100){ System.out.println("優秀"); }else if(score >= 80 && score<90){ System.out.println("良好"); }else if(score >=70 && score<80){ System.out.println("中等"); }else if(score >=60 && score<70){ System.out.println("及格"); }else if(score < 60){ System.out.println("不及格"); } } }
練習4:產生一個隨機數,和用戶一直在輸入的數字比較. public class test4{ public static void main(String[] args){ find(); } private static void find(){ int i = new Random().nextInt(100)+1; System.out.println("請猜1-100之內的數字:"); int a = new Scanner(System.in).nextInt(); while(true){ if(a>i){ System.out.println("猜大了"); }else if(a<i){ System.out.println("猜小了"); }else{ System.out.println("猜對了"); break; } } } }
三種循環的區別
for:知道循環次數
while/do...while:當循環次數不肯定時
while:先判斷,再執行,不符合規則,不執行代碼
do while:先執行,再判斷。代碼至少被執行一次。
方法
被命名的代碼塊,方法能夠含參也能夠不含參。
修飾符 返回值 方法名(參數){ 方法體; } public static void f(){ }
練習1: public class test1{ public static void main(String[] args){ f1(9); } private static void f1(int a){ return 10*a; } }
方法的重載
方法的重載是指在一個類中有多個同名的方法,但每一個方法都有不一樣的參數(參數的類型,個數,順序不一樣)。程序在調用方法時,能夠經過傳遞不一樣個數和類型的參數和決定具體使用哪個方法。
練習: public class test{ public static void main(String[] args){ int a = 3; int b = 9; String name = "jack"; f1(); f2(a); f3(a,b,name); } private static void f1(){ return 0; } private static void f2(int a){ return a*a; } private static void f3(int a,int b,String name){ return a+b+name; } }
數組
數組Array是用於存儲多個相同類型的數據的集合。想要獲取數組中的元素,能夠經過元素的下標來獲取,下標是從0開始的。
建立數組:
動態初始化:int[] a = new int[5]; 靜態初始化:int[] b = new int[]{1,2,3,4,5}; int[] c = {2,3,4,5,6};
練習1: public class Test1(){ public static void main(String[] args){ f1(); } private static void f1(){ //靜態初始化建立數組 int[] i = new int[]{1,2,3,4,5}; System.out.println(Arrays.toString(i)); //動態初始化建立數組 char[] j = new char[4]; j[0] = "c"; j[1] = "h"; j[2] = "a"; j[3] = "r"; System.out.println(Arrays.toString(j)); } //獲取數組的長度 System.out.println(j.length); }
練習2:建立隨機數組 public class Test2{ public static void main(Stirng[] args){ f(); } private static void f(){ int[] a = new int[5]; for(int i = 0;i < a.length;i++){ a[i] = new Random().nextInt(100)+1; } System.out.println(Arrays.toString(a)); } }
數組工具類Arrays
Arrays.toString(數組):將數組鏈接成字符串
Arrays.sort(數組):數組排序
Arrays.copyOf(數組,新的長度)複製數組長度爲一個指定長度的新數組。
System.arraycopy(原數組,原數組起始位置,目標數組,目標數組起始位置,複製的數量):不會建立新的數組,可是目標數組要事先存在。
Arrays.binarySearch(數組,目標值):二分法查找,在有序數組中查找目標值下標。
冒泡排序
相鄰位置比較,從小到大排序,若是小就往前換,i表明從頭至尾遍歷數據。
升序: public class Test1{ public static void main(String[] args){ int[] arr = new int[]{31,23,43,65,17,89,54,76}; int[] arrnew = f1(arr); System.out.println(Arrays.toString(arrnew)); } public static int[] f1(int[] a){ //外循環控制比較次數 for(int i = 0;i<a.length-1;i++){ //內循環控制比較大小,循環次數和外循環同樣 for(int j = 0;j<a.length-1;j++){ if(a[j]>a[j+1]){ int t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } return a; } } 降序: public class Test2{ public static void main(String[] args){ // f1(); int[] arr = new int[] {1,2,4,2,1,8,9,3,2,4}; int[] newarr = f2(arr); System.out.println(Arrays.toString(newarr)); } private static int[] f2(int[] arr) { //外循環控制次數 for(int i = 0;i<arr.length-1;i++) { //內循環控制大小 for(int j = 0;j<arr.length-1;j++) { if(arr[j]<arr[j+1]) { int t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } } return arr; }
變量
通常經過三部分來描述變量.變量類型,變量名,變量值.
變量的使用原則:就近原則.
局部變量
定義在方法裏,局部代碼塊中,方法運行完內存就釋放完了.
成員方法裏
定義在類裏方法外.做用域是在整個類中,類消失了,變量才釋放.
public class Test1{ int a = 9;//成員變量 { int x = 8;//局部變量 } public static void main(String[] args){ int sum = 10;//局部變量 } }