?static關(guān)鍵字
1, 使用static聲明屬性 ? static聲明全局屬性
2, 使用static聲明方法 ? 直接通過(guò)類名調(diào)用
3, 注意: ?使用static方法的時(shí)候, 只能訪問(wèn)static聲明的屬性和方法, 而非static聲明的屬性和方法是不能訪問(wèn)的
代碼:
class Doctor{
String name;
static int age = 30;//static聲明的屬性為全局屬性
public Doctor(String name){
this.name = name;
}
public void tell() {
System.out.println("姓名"+name+"? 年齡"+age);
}
}
public class StaticDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Doctor.age = 40; //用static 聲明的屬性可以直接用類名來(lái)調(diào)用
Doctor d1 = new Doctor("張三");
d1.tell();
Doctor d2 = new Doctor("李四");
d2.tell();
say();//如果say方法里去掉了static, 則會(huì)出錯(cuò)
}
public static void say() {
System.out.println("此處為了驗(yàn)證使用static方法的時(shí)候, 只能訪問(wèn)static聲明的屬性和方法");
}}
由static修飾的方法稱為類方法或靜態(tài)方法
靜態(tài)變量:
1, 由static修飾的變量稱為靜態(tài)變量, 也稱類變量
2, 靜態(tài)變量定義的位置是在方法之外
3, 靜態(tài)變量與靜態(tài)方法都是在類從磁盤(pán)加載至內(nèi)存后被創(chuàng)建的,與類同時(shí)存在, 同時(shí)消失
4, 靜態(tài)變量又稱類的成員變量, 在類中是全局變量, 可以被類中的所有方法調(diào)用
5, 靜態(tài)變量的值右JVM自動(dòng)初始化, 以下是各類型變量初始化值列表:
方法:
方法代表一段代碼, Java的代碼通常都封裝在方法中. 例如main方法, main方法是Java規(guī)定的每個(gè)類的代碼運(yùn)行入口
Java的代碼通常要在方法中編寫(xiě), 即代碼封裝在方法中
模塊化編程: 將具有某種功能的代碼塊封裝在一個(gè)方法中, 不同的代碼塊由不同的方法封裝, 利于程序的管理,維護(hù)
將具有復(fù)用價(jià)值的代碼封裝在方法中, 調(diào)用該代碼塊時(shí),只需調(diào)用方法名, 這樣能有效的減少程序的冗余
帶參方法:
static void 方法名(類型1 變量1, 類型2 變量2, ...){ 方法體 -方法中的代碼}
示例: static void feeling(String cause, String content){方法中的代碼};
帶參方法可以接收外界傳遞的數(shù)據(jù), 使得方法能處理更加復(fù)雜的問(wèn)題, 具有更靈活的功能.
代碼
public class Test23 {
static String name;
static int age;
static float height;
static char sex;
public static void main(String[] args) {
input();
fell("中獎(jiǎng)了", "哈哈");
input();
fell("心情不好", "嗚嗚");
}
static void fell(String cause, String face){
System.out.println(cause+ face);
}
static void input(){
Scanner scanner = new Scanner(System.in);
System.out.println("姓名:");
name = scanner.next();
System.out.println("年齡:");
age = scanner.nextInt();
System.out.println("性別:");
sex = scanner.next().charAt(0);
System.out.println("身高:");
height = scanner.nextFloat();
System.out.println("嗨,大家好, 我是"+name+"年齡是"+age+"歲,性別為"+sex+"身高"+height);
}
}
帶返回值的方法
1, 在Java的Math類中定義了許都具有計(jì)算功能的方法, 這些方法也稱為函數(shù)
2,Java 允許定義具有計(jì)算及返回功能的方法;
示例:
定義一個(gè)能保留小數(shù)點(diǎn)后任意位的方法pround, 在main方法中調(diào)用該方法, 保留指定小數(shù)點(diǎn)后任意位
代碼:
public class Test24 {
public static void main(String[] args) {
//對(duì)2.345四舍五入并保留小數(shù)點(diǎn)后兩位
double result = pround(2.345, 2);
System.out.println(result);
}
static double pround(double value, int n) {
//step1: 計(jì)算10的n次方
double pow10 = Math.pow(10, n);
//step2: 定義result變量保存計(jì)算結(jié)果
double result = value * pow10;
//step3, 對(duì)index+1位進(jìn)行四舍五入
result = Math.round(result);
//step4,環(huán)境value的值
result = result/pow10;
return result;
}
}
Java語(yǔ)言邏輯運(yùn)算
邏輯運(yùn)算種類
邏輯與運(yùn)算
特點(diǎn): 當(dāng)兩個(gè)關(guān)系運(yùn)算的結(jié)果都是true時(shí), 運(yùn)算的結(jié)果是true, 否則是false
長(zhǎng)路與運(yùn)算
1 運(yùn)算符號(hào): &
2 &在兩邊都是整數(shù)時(shí), 是逐位與運(yùn)算;在兩邊是關(guān)系運(yùn)算時(shí)時(shí)邏輯運(yùn)算
3, 長(zhǎng)路與運(yùn)算會(huì)把兩邊的關(guān)系運(yùn)算結(jié)果都計(jì)算出來(lái)
例如: ?4<3 & 5*3>12 ?step1: 計(jì)算4<3 是false ?step2:計(jì)算5*3>12 是true ?step3: false&true ,結(jié)果是false
?短路與運(yùn)算
1, 運(yùn)算符號(hào):&&
2, 短路與運(yùn)算的特點(diǎn): 當(dāng)運(yùn)算符左邊的關(guān)系運(yùn)算結(jié)果是false時(shí), 不再對(duì)右邊的關(guān)系運(yùn)算進(jìn)行計(jì)算
邏輯或運(yùn)算:
當(dāng)兩個(gè)關(guān)系運(yùn)算的結(jié)果有一個(gè)是true時(shí), 運(yùn)算的結(jié)果是true, 否則為false
長(zhǎng)路或運(yùn)算:
1, 運(yùn)算符:|
2, 長(zhǎng)路或運(yùn)算在兩邊都是整數(shù)時(shí), 是逐為或運(yùn)算;在兩邊是關(guān)系運(yùn)算時(shí),是邏輯運(yùn)算
3, 長(zhǎng)路或運(yùn)算會(huì)將兩邊的關(guān)系運(yùn)算結(jié)果都計(jì)算出來(lái)
短路或運(yùn)算:
1, 運(yùn)算符:||
2,短路或運(yùn)算的特點(diǎn): 當(dāng)運(yùn)算符號(hào)左邊的關(guān)系運(yùn)算結(jié)果是true時(shí), 不再進(jìn)行右邊的關(guān)系運(yùn)算, 直接得出true的結(jié)果
三中邏輯運(yùn)算的優(yōu)先級(jí): ?非運(yùn)算最高, 其次是與運(yùn)算, 優(yōu)先級(jí)最低的是或運(yùn)算, 例:
16進(jìn)制的1位數(shù)代表2進(jìn)制的4位數(shù)?
例如:十六進(jìn)制的41=二進(jìn)制的 01000001;
循環(huán)
while
例: 打印輸出所有大寫(xiě)字母和對(duì)應(yīng)的unicode碼:
//方法1:
int i= 65;
while(i<=65+25){
System.out.println((char)i+":"+i);
i++;
}
//方法二
char c = 'A';
while(c<='Z'){
System.out.println(c+":"+(int)c);
c++;
}
do while語(yǔ)句:
代碼:
char c = 'A';
do {
System.out.println(c+":"+(int)c);
c++;
} while (c<='Z');
switch語(yǔ)句:
代碼:
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入五分制分?jǐn)?shù):");
int i = scanner.nextInt();
switch (i) {
case 5:
System.out.println("優(yōu)秀");
break;
case 4:
System.out.println("良好");
break;
case 3:
System.out.println("及格");
break;
case 2:
case 1:
case 0:
System.out.println("不及格");
break;
default:
System.out.println("輸入的不是五分制分?jǐn)?shù)");
break;
}
案例 ;輸入月份, 輸出對(duì)應(yīng)月的天數(shù)
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入月份:");
int month = scanner.nextInt();
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("30天");
break;
case 2:
System.out.println("28天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30天");
break;
default:
System.out.println("輸入的不是月份");
break;
}
}
}
String
?代碼:
String str1 = "hello";//給字符串str1賦值
String str2 = new String("hello");//給字符串str2賦值
System.out.println(str1 == str2);//結(jié)果為false
System.out.println(str1.equals(str2));//結(jié)果為true
// 注意: "=="比較的是地址? equals 比較的是內(nèi)容
string字符串常用方法:
1, 字符串長(zhǎng)度: length()方法
2, 字符串轉(zhuǎn)換為數(shù)組: toCharArray();
代碼:?
String str = " ? jikexueyuan@163.com";
char data[] = str.toCharArray();
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]+" ");
}
3, 從字符串中取出指定位置的字符: charAt();
str.charAt(0);
4, 字符串與byte數(shù)組進(jìn)行轉(zhuǎn)換: getBytes();
byte bytes[] = str.getBytes();
5, 過(guò)濾字符串中存在的字符: indexOf();
str.indexOf("@");//如果有則返回當(dāng)前位置, 如果沒(méi)有則返回-1;
6, 去掉字符串的前后空格: trim();
7,從字符串中取出子字符串: subString()
8,大小寫(xiě)轉(zhuǎn)換: toLowerCase() ?toUpperCase()
9, 判斷字符串的開(kāi)頭結(jié)尾字符: endsWith() ?startWith()
10, 替換String字符串中的一個(gè)字符: replace();
Java字符串之StringBuffer
1, 認(rèn)識(shí)StringBuffer: 緩沖區(qū), 本身也是操作字符串, 但是與String不同, StringBuffer是可以更改的, StringBuffer是一個(gè)操作類, 所以必須通過(guò)實(shí)例化進(jìn)行操作
代碼:
StringBuffer s = new StringBuffer();
s.append("ss");
System.out.println(str.toString());//ss
tell(s);
System.out.println(s.toString());//ss love ss
}
public static void tell(StringBuffer s) {
s.append(" love ss");
}
2, StringBuffer的常用方法:
append(): 追加操作
insert():插入操作
代碼:
StringBuffer s = new StringBuffer();
s.append("ss");
s.insert(0, "love ss");
System.out.println(s.toString());
replace():替換? s.replace(1, 2, "ii");//第一個(gè)參數(shù)開(kāi)始位置, 第二個(gè)參數(shù)結(jié)束位置, 三個(gè)參數(shù)是改的字符串
indexOf():
StringBuilder
1, 一個(gè)可變的字符序列, 該類被設(shè)計(jì)作用StringBuffer的一個(gè)簡(jiǎn)易替換, 用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候, 建議優(yōu)先考慮該類, 速度比StringBuffer要快
2, 但是如果設(shè)計(jì)到線程安全方面, 建議使用StringBuffer.
3, 常用方法: append() ? insert()