Day 004 狂神java基礎第一階段
阿新 • • 發佈:2022-04-11
註釋
- 單行註釋
//單行註釋
- 多行註釋
/* 多行註釋
多行註釋
*/
- 文件註釋
/**
*@文件註釋
*@文件註釋
*/
識別符號
關鍵字:關鍵字不能用來作為類名(檔名)
類名、變數名以及方法名都被稱為識別符號
注意
-
所有的識別符號都應該以 字母(A-Z或者a-z)、美元符號( $ )、或者下劃線( _ )開始
-
首字元之後可以是 字母(A-Z或者a-z)、美元符號( $ )、下劃線( _ ) 或 數字的任何字元組合
-
不能使用關鍵字作為變數名或者方法名
-
識別符號是大小寫敏感的
-
合法識別符號舉例:
age、&salary、_value、__1
-
非法識別符號舉例:
123abc、-salary、#abc
-
變數儘量使用英文命名,不用中文或者拼音
資料型別
強型別語言
- 要求變數的使用要嚴格符合規定,所有變數都必須先定義後才能使用
- 安全性高,速度慢
- Java為強型別語言
弱型別語言
- 變數的使用符合規定,
- 安全性低,速度快
Java的資料型別
-
基本型別(primitive type)
包含數值型別和Boolean(布林)型別
數值型別:包含整數型別(1-4)、浮點型別(5、6)和字元型別在(7)
布林值型別:佔1位,值只有 true 和 false 兩種
//八大基本資料型別 //整數 int num1 = 10;//最常用 byte num2 = 20; short num3 = 30; long num4 = 40L;//Long型別要在數字後面加一個L //小數:浮點數 float num5 = 50.1F;//float型別要在數字後面加一個F double num6 = 3.141592653589793238462463; //字元(代表一個"字“) char name = '孫'; //字串,String不是關鍵字,是一個類 String name1 = "手殘的老孫"; //布林值:是非 boolean flag = true; //boolean flag = false;
-
引用型別(reference type)
包含 類、介面和陣列三種
注意(拓展)
- 進位制型別
0,1//二進位制
int i1 = 10;//十進位制
int i2 = 010;//八進位制0
int i3 = 0x10//十六進位制0x
- 最好完全避免使用浮點數進行比較
//float 有限 離散 舍入誤差 大約 接近但不等於1 //double //銀行業務不能使用浮點數 float f = 0.1f; //0.1 double d = 1.0 / 10; //0.1 System.out.println(f==d); //判斷 f 和 d 是否相等 //false float d1 = 165413574986351674; float d2 = d1 + 1; System.out.println(d1==d2); //true
-
所有的字元本質還是數字
Java使用Unicode表進行編碼
char c1 = 'a'; char c2 = '中'; System.out.println(c1);//a System.out.println((int) c1);//強制型別轉換 97,a在表中值為97 System.out.println(c2);//中 System.out.println((int)c2);//20013 char c3 = '\u0061'; System.out.println(c3);//a
-
轉義字元
\t
/*
製表符
前面的輸出內容位數為8的倍數,\t將輸出8個空格
前面的輸出內容位數不是8的倍數,\t將補足8位
*/
\n //換行符
型別轉換
變數記憶體容量高低
低--------------------------------------------->高
byte,short,char--->int--->long--->float--->double
運算中,不同型別的資料先轉化為同一型別,然後進行運算
- 強制型別轉換
- 自動型別轉換
int i = 128;
byte b = (byte) i;//強制轉換
double c = i;//自動轉換
/*
強制轉換: (型別)變數名 高----->低
自動轉換: (型別)變數名 低----->高
*/
System.out.println(i);//128
System.out.println(b);//-128 byte最大為127, 記憶體溢位
System.out.println(c);//128.0
注意
- 不能對布林值進行轉換
- 不能吧物件型別轉換為不相干的型別
- 在把高容量轉換到低容量的時候,強制轉換
- 轉換的時候可能存在記憶體溢位,精度問題
System.out.println((int) 23.7);//23
System.out.println((int) -45.89f);//-45
System.out.println("==========================");
char c = 'a';
int d = c + 1;//char到int,低轉高,自動轉換
System.out.println(d);//98
System.out.println((char) d);//b 強制轉換為字元型
- 操作比較大的數的時候,注意溢位問題
- JDK7 新特性,數字之間可以用下劃線分割
int money = 10_0000_0000;
System.out.println(money);//1000000000
int years = 20;
int total1 = money * years;
System.out.println(total1);//-1474836480,資料溢位
long total2 = money * years;//先計算,後轉換,轉換之前就存在問題了
long total3 = money * ((long) years);//先進行型別轉換,後輸出
System.out.println(total3);//20000000000
變數
- java是一種強型別語言,每個變數都必須宣告其型別
- java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域
Type varName [=value][{,varName[=value]}];
//資料型別 變數名 = 值; 可以使用逗號隔開來宣告多個同類型變數
//不建議在一行定義多個值
變數型別及作用域
- 包含類變數、例項變數和區域性變數三種
public class Demo08 {
//類變數 static
static double salary = 2500;
//屬性:變數
//例項變數:在類裡面,方法外面。從屬於物件;如果不自行初始化,會變成這個型別的預設值
//布林值預設是false
//除了基本型別,其餘的預設值都是null
String name;//預設為null
int age;//預設為0
//main方法
public static void main(String[] args) {
//區域性變數:在一個大方法裡面。必須宣告和初始化
int i = 10;
System.out.println(i);//10
// 變數型別 變數名字 = new Demo08;
Demo08 demo08 = new Demo08();
System.out.println(demo08.age);//0,數值型別變數的預設值
System.out.println(demo08.name);//null,字元或字串型別變數的預設值
System.out.println(salary);//2500.0
}
注意
- 每個變數都有型別,可以是基本型別,也可以是引用型別
- 變數名必須是合法的識別符號
- 變數宣告是一條完整的語句,因此每一個宣告都必須以分號結束
常量
constant:初始化(initialize)之後不能再改變值!不會變動的值。
所謂常量可以理解成一種特殊的變數,它的值被設定後,在程式執行過程中不允許被改變。
final 常量名 = 值;
- 常量名一般使用大寫字元
public class Demo09 {
static final double PI = 3.14;
//final static double PI = 3.14;final為修飾符,不存在先後順序
public static void main(String[] args) {
System.out.println(PI);//3.14
}
}
命名規範
- 所有變數、方法、類名:見名知意
- 類成員變數:首字母小寫和駝峰原則:除了第一個單詞以外,後面的單詞首字母大寫。monthSalary
- 區域性變數:首字母小寫和駝峰原則
- 常量:大寫字母和下劃線:MAX_VALUE
- 類名:首字母大寫和駝峰原則:Man,GoodMan
- 方法名:首字母小寫和駝峰原則:run(),runRun()
運算子
- 算數運算子:+、-、*、/、%(取餘,模運算)、++、--(自增自減運算子)
- 賦值運算子:=
public class Demo01 {
public static void main(String[] args) {
//二元運算子
//Ctrl + D :複製當前行到下一行
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(c%a);//5,c/a=2餘5
System.out.println(a + b);//30
System.out.println(a - b);//-10
System.out.println(a * b);//200
System.out.println(a / b);//0,只保留整數部分
System.out.println(a /(double) b);//0.5
}
}
public class Demo02 {
public static void main(String[] args) {
long a = 123123123123123L;
int b = 123;
short c = 10;
byte d = 8;
//多個變數操作中有一個數為long,那麼結果型別為long
//若有double,則結果是double
System.out.println(a + b + c + d);//Long
//如果沒有long,結果都為int,無論是否有int操作
System.out.println(b + c + d);//int
System.out.println(c + d);//int
}
}
public class Demo04 {
public static void main(String[] args) {
//++ -- 自增自減運算子 一元運算子
int a = 3;
//++在前,先自增,++在後,後自增
int b = a++;//執行完這行程式碼後,先給b賦值,之後再自增
System.out.println(a);//4
int c = ++a;//執行這行程式碼前,先給a自增,再給c賦值
System.out.println(a);//5
System.out.println(b);//3
System.out.println(c);//5
//冪運算,不可以直接使用^
double pow = Math.pow(2, 3);
System.out.println(pow);//8.0
}
}
- 關係運算符:>, <, >=, <=, ==, !=instanceof
public class Demo03 {
public static void main(String[] args) {
//關係運算符返回的結果: 正確,錯誤 布林值
int a = 10;
int b = 20;
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
}
- 邏輯運算子:&&, ||, !
public class Demo05 {
public static void main(String[] args) {
//邏輯運算子, 與(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a && b));//與運算,a && b:false
System.out.println("a || b:"+(a || b));//或運算,a || b:true
System.out.println("!(a && b):"+(!(a && b)));//非運算,!(a && b):true
//短路運算
int c = 5;
boolean d = (c < 4) && (c++ < 4);//當&&之前為假,則直接輸出,不會執行後面的程式碼
System.out.println(d);//false
System.out.println(c);//5,說明沒有執行c++
}
}
- 位運算子:&(與), |(或), ^(非), ~(取反), >>, <<, >>>(瞭解即可!!!)
public class Demo06 {
public static void main(String[] args) {
/*
A=0011 1100
B=0000 1101
--------------------------------------
A&B = 0000 1100 對應位全為1則為1,否則為0
A|B = 0011 1101 對應位都為0則為0,否則為1
A^B = 0011 0001 對應位相同為0,不同為1
~B = 1111 0010
如何計算2*8
2*8 = 2*2*2*2
<<位左移 *2
>>位右移 /2
*/
System.out.println(2<<3);//16
}
}
- 條件運算子:? :
public class Demo08 {
public static void main(String[] args) {
//三元運算子
//x ? y : z
//如果x==true,則結果為y,否則結果為z
int score1 = 80;
int score2 = 50;
String type1 = score1 < 60 ? "不及格" : "及格";
String type2 = score2 < 60 ? "不及格" : "及格";
System.out.println(type1);//及格
System.out.println(type2);//不及格
}
}
- 擴充套件賦值運算子:+=,-=,/=
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b;//a = a + b
a -= b;//a = a - b
//字串連線符 +
//在加號兩側只要有一個是字串型別(string),會將其他計算結果轉換成字串型別然後進行連線
System.out.println(a + b);//30
System.out.println("c" + a + b);//c1020
System.out.println(a + b + "c");//30c
}
}
運算子優先順序
包機制
-
包的本質就是資料夾
-
一般利用公司域名倒置作為包名
- 使用import匯入包
JavaDoc
- 用來生成自己的API文件
引數資訊
-
@author 作者名
-
@version 版本號
-
@science 知名需要最早使用的jdk版本
-
@param 引數名
-
@return 返回值情況
-
@throws 異常丟擲情況