JAVA 從入門到Just met java
什麽是開發語言:人類與計算機溝通的語言
什麽是java:一門優秀的開發語言, 為什麽學java:這就問你自己了,可能吃飽了撐的。不想早死就別學。
/** 計算機如何解決問題 * 例如:給我一杯水 轉身到廚房 找到一個杯子 找到水壺 在杯子中倒入一些水 拿著杯子走回桌子 * 程序是用特殊的編程語言寫出來表達如何解決我問題的 * 程序=算法+數據結構 * 算法:1.我們要讓計算機做計算,就需要像這樣找出計算步驟,如何用編程語言寫出來java的作用:什麽桌面程序,web程序,安卓程序等等都可以做* 2.計算機做的所有事情都叫算法 * 3.計算機的步驟就是算法 * 計算機的思維 * 2x+6=20 * 解方程 * 枚舉 * 二分搜索 * 枚舉求最大公約數 * 程序的執行步驟:解釋 翻譯 執行 */
Java技術平臺: 1.java SE是java的核心,能完成桌面應用程序的開發,是其它兩者的基礎; 2.java EE主要用於網絡程序和企業應用開發。 3.java ME這個基本上沒人用可以忽略
java語言的特點:
開發java程序,先下個jdk,再下一個ide(理解成開發工具就行),或者可以直接下個MyEclipse,安裝都是傻瓜式操作。 jdk和jre的解釋:
1,JDK:Java Development Kit,java的開發和運行環境,java的開發工具和jre。
2,JRE:Java Runtime Environment,java程序的運行環境,java運行的所需的類庫+JVM(java虛擬機)。
3,配置環境變量:
環境變量的配置:
1.安裝完成後,右擊"我的電腦",點擊"屬性",選擇"高級系統設置"
2.選擇"高級"選項卡,點擊"環境變量";
1):永久配置方式:JAVA_HOME=%安裝路徑%\Java\jdk path=%JAVA_HOME%\bin
2):臨時配置方式:set path=%path%;C:\Program Files\Java\jdk\bin
特點:系統默認先去當前路徑下找要執行的程序,如果沒有,再去path中設置的路徑下找。
classpath的配置:
1):永久配置方式:classpath=.;c:\;e:\
2):臨時配置方式:set classpath=.;c:\;e:\
java的運行機制:
舉個栗子: package com.alphabet.entry; public class HelloWorld { public static void main(String[] args) { System.out.println("helloworld"); }}編譯之後, 我們得到了HelloWorld.class,
在HelloWorld裏面, 我們調用了 JAVA API中的 java.lang.System這個類的靜態成員對象 out, out 的靜態方法: public static void println(String string); 然後我們讓虛擬機器來執行這個HelloWorld。
1. jvm會在classpath中找到HelloWorld.class。
2. jvm中的解釋器(interpret)會把HelloWorld.class解釋成字節碼。
3. 把解釋後的字節碼交由execution engin執行。
4. execution engin會調用native method(即平臺相關的字節碼)來在host system的stdout(顯示器)的指定部分打印出指定的字符串。
5. 這樣, 我們就看到"helloworld"字樣了。
javac命令和java命令做什麽事情呢?
要知道java是分兩部分的:一個是編譯,一個是運行。
javac:負責的是編譯的部分,當執行javac時,會啟動java的編譯器程序。對指定擴展名的.java文件進行編譯。 生成了jvm可以識別的字節碼文件。也就是class文件,也就是java的運行程序。
java:負責運行的部分.會啟動jvm.加載運行時所需的類庫,並對class文件進行執行.
一個文件要被執行,必須要有一個執行的起始點,這個起始點就是main函數.
java的基礎語法:1.Unicode字符集:java語言使用的Unicode標準字符集。在Unicode字符集中,前128個字符剛好是ASCII碼,但大部分國家的“字母表”中的字母都是Unicode字符集中的字母,因此java所使用的字母不僅包括通常的拉丁字母,還包括漢子、希臘字母等等。 java關鍵字
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
true | false | null |
1),數字不可以開頭。
2),不可以使用關鍵字。
變量的作用域和生存期:變量的作用域:
作用域從變量定義的位置開始,到該變量所在的那對大括號結束;
生命周期:
變量從定義的位置開始就在內存中活了;
變量到達它所在的作用域的時候就在內存中消失了;
數據類型:java數據類型是一切編程的基礎。java絕大部分的操作是基於內存的,如果沒有內存一切都無法說起,而數據類型就是跟內存息息相關的事物,他會讓我們合理的使用內存。只有基礎越牢固,才能越往上。
變量就是申請內存來存儲值。也就是說,當創建變量的時候,需要在內存中申請空間。
內存管理系統根據變量的類型為變量分配存儲空間,分配的空間只能用來儲存該類型數據。
常用數據類型:byte、short、int、long、float、double、char、boolean
簡單類型 |
boolean |
byte |
char |
short |
int |
long |
float |
double |
void |
二進制位數 |
1 |
8 |
16 |
16 |
32 |
64 |
32 |
64 |
-- |
封裝器類 |
Boolean |
Byte |
Character |
Short |
Integer |
Long |
Float |
Double |
Void |
public class DataType { /** * byte 數據類型是8位、有符號的,以二進制補碼表示的整數; * 源碼: public static final byte MIN_VALUE = -128; * 最小值是 -128(-2^7); * 源碼:public static final byte MAX_VALUE = 127; * 最大值是 127(2^7-1); * 默認值是 0; * byte 類型用在大型數組中節約空間,主要代替整數,因為 byte 變量占用的空間只有 int 類型的四分之一; * by1是基本數據類型,by2是封裝類 */ public static void byteType() { // TODO Auto-generated method stub byte by1=6; System.out.println(by1); Byte by2=8; String test=by2.toString(); System.out.println(test); System.out.println(test.getClass()); } /** * short 數據類型是 16 位、有符號的以二進制補碼表示的整數 * 最小值是 -32768(-2^15); * 最大值是 32767(2^15 - 1); * Short 數據類型也可以像 byte 那樣節省空間。一個short變量是int型變量所占空間的二分之一; * 默認值是 0; * */ public static void shortType() { // TODO Auto-generated method stub short sh=8; System.out.println(sh); Short sh2=8; System.out.println(sh2); } /** * int 數據類型是32位、有符號的以二進制補碼表示的整數; * 最小值是 -2,147,483,648(-2^31); * 最大值是 2,147,483,647(2^31 - 1); * 一般地整型變量默認為 int 類型 * 默認是0 * 也是最常用的類型 * @Native public static final int MIN_VALUE = 0x80000000; * @Native public static final int MAX_VALUE = 0x7fffffff; * */ public static void intType() { // TODO Auto-generated method stub int int1=6; Integer int2=8; int int3=int2.intValue(); System.out.println(int1); System.out.println(int2); System.out.println(int3); System.out.println(int2.MAX_VALUE); System.out.println(int2.MIN_VALUE); } /** * long:長整型 * long 數據類型是 64 位、有符號的以二進制補碼表示的整數; * 最小值是 -9,223,372,036,854,775,808(-2^63); * 最大值是 9,223,372,036,854,775,807(2^63 -1); * 這種類型主要使用在需要比較大整數的系統上; * */ public static void longType() { // TODO Auto-generated method stub long long1=6; Long long2=8L; long long3=long2.SIZE; System.out.println(long1); System.out.println(long2); System.out.println(long3); System.out.println(long2.MAX_VALUE); System.out.println(long2.MIN_VALUE); System.out.println(long2.max(100, 999999999)); } /** * float 數據類型是單精度、32位、符合IEEE 754標準的浮點數; * float 在儲存大型浮點數組的時候可節省內存空間; * 默認值是 0.0f; * 浮點數不能用來表示精確的值,如貨幣; * */ public static void floatType() { // TODO Auto-generated method stub float f1=6; Float f2=8f; float f3=f2.SIZE; System.out.println(f1); System.out.println(f2); System.out.println(f3); System.out.println(f2.MAX_VALUE); System.out.println(f2.MIN_VALUE); } /** * char類型是一個單一的 16 位 Unicode 字符; * 最小值是 \u0000(即為0); * 最大值是 \uffff(即為65,535); * char 數據類型可以儲存任何字符; * char可以輸入任何東西,但是只唯一 */ public static void charType() { char c1=‘f‘; System.out.println(c1); Character c2=‘f‘; System.out.println(c2); /** * 為什麽char和character不能來草字符串呢 * 首先String不屬於8種基本數據類型,String是一個引用類型的對象.他是專門用來處理字符串的 * 因為char采用的是Unicode編碼,所以基本上可以容納所有的字符. * 而String是用來操作字符串的,String其實也就是一個char類型的數組 */ char[] c= {‘1‘,‘2‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘}; String d="12abcde"; if (c.equals(d)) { System.out.println("一樣的"); } } /** * double 數據類型是雙精度、64 位、符合IEEE 754標準的浮點數; * 浮點數的默認類型為double類型; * double類型同樣不能表示精確的值 * //浮點計算是有誤差的 例如 * System.out.println(1.2-1.1); * double和float表示精確的數有問題 */ public void doubleType() { // TODO Auto-generated method stub double d1=6; Double d2=8d; double d3=d2.SIZE; System.out.println(d1); System.out.println(d2); System.out.println(d3); System.out.println(d2.MAX_VALUE); System.out.println(d2.MIN_VALUE); } /** * boolean數據類型表示一位的信息; * 只有兩個取值:true 和 false; * 這種類型只作為一種標誌來記錄 true/false 情況; * 默認值是 false; * */ public static void booleanType() { // TODO Auto-generated method stub boolean b1=true; Boolean b2=false; boolean b3=b2.booleanValue(); System.out.println(b1); System.out.println(b2); System.out.println(b3); System.out.println(b2.hashCode()); System.out.println(b2.getClass()); } public static void main(String[] args) { System.out.println("Hello"); } }
- 運算符號:
4)、邏輯運算符。
& | ^ ! && ||
邏輯運算符除了 ! 外都是用於連接兩個boolean類型表達式。
&: 只有兩邊都為true結果是true。否則就是false。
|:只要兩邊都為false結果是false,否則就是true
^:異或:和或有點不一樣。
兩邊結果一樣,就為false。
兩邊結果不一樣,就為true.
& 和 &&區別: & :無論左邊結果是什麽,右邊都參與運算。
&&:短路與,如果左邊為false,那麽右邊不參數與運算。
| 和|| 區別:|:兩邊都運算。
||:短路或,如果左邊為true,那麽右邊不參與運算。
5)、位運算符:用於操作二進制位的運算符。
& | ^
<< >> >>>(無符號右移)
練習:對兩個變量的數據進行互換。不需要第三方變量。
int a = 3,b = 5;-->b = 3,a = 5;
方法一:
a = a + b; a = 8;
b = a - b; b = 3;
a = a - b; a = 5;
方法二:
a = a ^ b;//
b = a ^ b;//b = a ^ b ^ b = a
a = a ^ b;//a = a ^ b ^ a = b;
練習:高效的算出 2*8 = 2<<3;
數據類型轉換
自動類型轉換
數據類型要兼容
目標類型大於原類型
強制類型轉換
目標類型小於源類型
運算符的優先級:
最高的優先級:()
最低的優先級:賦值運算符(=)
優先級順序:算數運算符>關系運算符>邏輯運算符
Scanner sc=new Scanner(System.in);//在Consolo控制輸出
// Scanner out=new Scanner((Readable) System.out);
條件語句:if(條件){語句序列} 如果什麽什麽就什麽什麽
switch (key) { case value: break;
default: break; }
JAVA 從入門到Just met java