DAY 05
1票渠、
public classArrayDemo {
?????? public static void main(String[] args){
????????????? // int[] arr = newint[]{5,1,7,0,8,1,3};
????????????? // int[] arr = {3,1,7,3,8,0,4};
????????????? // arr[3] = 15;
????????????? // System.out.println(arr[3]);
????????????? int[] arr;
????????????? // arr = new int[5];
????????????? // arr = new int[]{5,1,7,0,8,1,3};
????????????? arr = {3,1,7,3,8,0,4};
2、
importjava.util.Arrays;
public classArrayCopyDemo {
?????? public static void main(String[] args){
????????????? // int[] arr1 = {5,1,7,0,8,2,6};
????????????? // int[] arr2 = new int[9];
????????????? //表示從arr1下標(biāo)為2的位置上復(fù)制4個(gè)元素放入arr2數(shù)組中李根,從arr2數(shù)組的下標(biāo)為4的位置開始放
????????????? // System.arraycopy(arr1, 2, arr2,4, 4);
????????????? //System.out.println(Arrays.toString(arr2));
????????????? //數(shù)組的擴(kuò)容 --- 數(shù)組的復(fù)制 --- 產(chǎn)生一個(gè)新的數(shù)組攒庵,導(dǎo)致擴(kuò)容之后的數(shù)組和原數(shù)組不是同一個(gè)
????????????? int[] arr = {3,6,1,7,9};
????????????? /*
????????????? int[] newArr = new int[8];
????????????? System.arraycopy(arr, 0, newArr,0, arr.length);
????????????? arr = newArr;
????????????? */
????????????? System.out.println(arr);
????????????? arr = Arrays.copyOf(arr, 8);
????????????? System.out.println(arr);
????????????? System.out.println(Arrays.toString(arr));
?????? }
}
3嘴纺、
importjava.util.Arrays;
public classArrayApplicationDemo {
?????? public static void main(String[] args){
????????????? int[] arr = newint[]{5,1,7,0,8,1,3,4,12,6};
????????????? //獲取最大值
????????????? /*
????????????? int max = arr[0];
????????????? for(int i = 1; i < arr.length;i++){
???????????????????? if(max < arr[i])
??????????????????????????? max = arr[i];
????????????? }
????????????? System.out.println(max);
????????????? */
????????????? int max = 0;
????????????? for(int i = 1; i < arr.length;i++){
???????????????????? if(arr[max] < arr[i])
??????????????????????????? max = i;
????????????? }
????????????? System.out.println(arr[max]);
????????????? //遍歷數(shù)組
????????????? //方式一:下標(biāo)是從0->length - 1
????????????? //先依次獲取下標(biāo)败晴,然后利用下標(biāo)獲取對(duì)應(yīng)位置上的元素
????????????? /*
????????????? for(int i = 0; i < arr.length;i++){
???????????????????? //System.out.println(arr[i]);
???????????????????? arr[i] += 10;
????????????? }
????????????? */
????????????? //方式二:直接獲取每一個(gè)位置上的元素
????????????? //每一個(gè)元素都是一個(gè)int類型元素,那么就可以定義一個(gè)int類型的變量來依次表示每一個(gè)位置上的值
????????????? //此時(shí)i會(huì)依次表示數(shù)組中的每一個(gè)元素
????????????? //增強(qiáng)for循環(huán)
????????????? //只能遍歷數(shù)組但是不能改變數(shù)組中的元素
????????????? /*
????????????? for(int i : arr){
???????????????????? // System.out.println(i);
???????????????????? i += 10;
????????????? }
????????????? */
????????????? //方式三:將數(shù)組中的元素一個(gè)個(gè)的拿出來拼接成字符串
????????????? // String str =Arrays.toString(arr);
????????????? // System.out.println(str);
????????????? //獲取指定下標(biāo)位置上的元素
????????????? // arr[5] += 15;
????????????? // System.out.println(arr[1]);
????????????? //獲取數(shù)組的長(zhǎng)度
????????????? // int len = arr.length;
????????????? // System.out.println(len);
?????? 4栽渴、
importjava.util.Scanner;
public classArrayExer {
?????? public static void main(String[] args){
????????????? //獲取行數(shù)
????????????? Scanner s = newScanner(System.in);
????????????? int row = s.nextInt();
????????????? //定義二維數(shù)組來存儲(chǔ)楊輝三角
????????????? int[][] arr = new int[row][];
????????????? //遍歷數(shù)組尖坤,向里填充元素
????????????? for(int i = 0; i < row; i++){
???????????????????? //先給每一個(gè)一維數(shù)組定義大小
???????????????????? arr[i] = new int[i + 1];
???????????????????? //遍歷這個(gè)一維數(shù)組,向里填充元素
???????????????????? for(int j = 0; j <= i;j++){
??????????????????????????? //判斷頭尾元素
??????????????????????????? if(j == 0 || j == i)
?????????????????????????????????? arr[i][j] =1;
??????????????????????????? else
?????????????????????????????????? arr[i][j] =arr[i - 1][j] + arr[i - 1][j - 1];
??????????????????????????? //填充完成之后打印這個(gè)填充的元素
??????????????????????????? System.out.print(arr[i][j]+ "\t");
???????????????????? }
???????????????????? System.out.println();
5闲擦、
importjava.util.Scanner;
public classArraySearchDemo {
?????? public static void main(String[] args){
????????????? /*
????????????? int[] arr = {5,1,7,0,8,2,6};
????????????? Scanner s = newScanner(System.in);
????????????? int n = s.nextInt();
????????????? //定義一個(gè)變量記錄位置
????????????? //規(guī)定如果找不到這個(gè)元素慢味,將下標(biāo)記錄-1
????????????? int index = -1;
????????????? for(int i = 0; i < arr.length;i++){
???????????????????? if(arr[i] == n){
??????????????????????????? index = i;
??????????????????????????? break;
???????????????????? }
????????????? }
????????????? System.out.println(index);
????????????? */
????????????? //二分查找/折半查找
????????????? //空間復(fù)雜度:o(1)
????????????? int[] arr ={5,9,15,16,28,37,45,48,56,59,60};
????????????? Scanner s = newScanner(System.in);
????????????? int n = s.nextInt();
????????????? //記錄最小值的下標(biāo)
????????????? int min = 0;
????????????? //記錄最大值的下標(biāo)
????????????? int max = arr.length - 1;
????????????? int mid = (max + min) / 2;
?????? ?????? while(arr[mid]!= n){
???????????????????? if(arr[mid] > n)
??????????????????????????? max = mid - 1;
???????????????????? else
??????????????????????????? min = mid + 1;
???????????????????? if(min > max){
??????????????????????????? mid = -1;
??????????????????????????? break;
???????????????????? }
???????????????????? mid = (min + max) / 2;?????????????
????????????? }?????
????????????? System.out.println(mid);
6、
importjava.util.Arrays;
public class ArraySortDemo{
?????? public static void main(String[] args){
????????????? int[] arr = {5,1,7,0,8,2,6};
????????????? //冒泡排序
????????????? //定義一個(gè)循環(huán)控制輪數(shù)
????????????? /*
????????????? for(int i = 1; i < arr.length;i++){
???????????????????? //定義一個(gè)循環(huán)控制每一個(gè)輪的次數(shù)
???????????????????? for(int j = 1; j <=arr.length - i; j++){
??????????????????????????? if(arr[j - 1] > arr[j]){
?????????????????????????????????? int temp =arr[j - 1];
?????????????????????????????????? arr[j - 1] =arr[j];
?????????????????????????????????? arr[j] =temp;
??????????????????????????? }
???????????????????? }
????????????? }
????????????? */
????????????? //選擇排序
????????????? //控制輪數(shù)
????????????? /*
????????????? for(int i = 1; i < arr.length;i++){
???????????????????? //控制每一輪要比較的下標(biāo)
???????????????????? for(int j = i; j
??????????????????????????? //拿選定的下標(biāo)上的元素和比較的下標(biāo)上的元素進(jìn)行比較
??????????????????????????? if(arr[i - 1] >arr[j]){
?????????????????????????????????? int temp =arr[i - 1];
?????????????????????????????????? arr[i - 1] =arr[j];
?????????????????????????????????? arr[j] =temp;
??????????????????????????? }
???????????????????? }
????????????? }
????????????? */
????????????? //只能進(jìn)行升序排序
????????????? //擴(kuò)展:底層用的是快速排序+歸并排序
????????????? //時(shí)間復(fù)雜度:O(nlogn)
????????????? Arrays.sort(arr);
????????????? //反轉(zhuǎn)數(shù)組
????????????? //方式一:
????????????? //時(shí)間復(fù)雜度O(n),空間復(fù)雜度o(n)
????????????? /*
????????????? int[] newArr = newint[arr.length];
????????????? for(int i = arr.length - 1, j = 0;i >= 0; i--, j++){
???????????????????? newArr[j] = arr[i];
????????????? }
????????????? */
????????????? //方式二:頭尾交換
????????????? //時(shí)間復(fù)雜度O(n),空間復(fù)雜度o(1)
????????????? for(int i = 0, j = arr.length - 1;i <= j; i++, j--){
???????????????????? int temp = arr[i];
???????????????????? arr[i] = arr[j];
???????????????????? arr[j] = temp;
????????????? }
????????????? System.out.println(Arrays.toString(arr));??????
?????? }
}
7墅冷、
public classLoopExer {
?????? public static void main(String[] args){
????????????? /*
???????????????????? *
???????????????????? **
???????????????????? ***
???????????????????? ****
???????????????????? *****
????????????? */
????????????? for(int i = 1, j = 1; i <= 9;j++){
???????????????????? //無論哪一行纯路,上來都是先打印*
???????????????????? System.out.print("*");
???????????????????? //判斷是否是打印完成本行最后一個(gè)*
???????????????????? if(j == i){
??????????????????????????? //換行
??????????????????????????? System.out.println();
??????????????????????????? //行數(shù)+1
??????????????????????????? i++;
??????????????????????????? // *從頭重新開始計(jì)數(shù)
??????????????????????????? j = 0;
???????????????????? }
????????????? }
?????? }
}
DAY 06
1、
packagecn.tedu.test;
public classMethodDemo {
?????? // Alt + /提示鍵
?????? // Ctrl+F11運(yùn)行
?????? // Ctrl + Shift + O導(dǎo)包
?????? // Ctrl+D刪除一行
?????? // Ctrl+/單行注釋/取消單行注釋
?????? // Ctrl+Shift+/多行注釋
?????? // Ctrl+Shift+\取消多行注釋
?????? // Alt+↑/↓ 向上/下移動(dòng)
?????? public static void main(String[] args) {
????????????? System.out.println(add(100000));
?????? }
?????? public static int add(int n) {
????????????? if (n == 1)
???????????????????? return 1;
????????????? return n + add(n - 1);
?????? }
}
2寞忿、
packagecn.tedu.object;
public classPersonDemo {
?????? public static void main(String[] args) {
????????????? //利用new關(guān)鍵字創(chuàng)建了一個(gè)Person對(duì)象
????????????? Person p = new Person();
????????????? //表示給對(duì)象p的屬性name進(jìn)行賦值
????????????? p.name = "秋香";
????????????? //表示給對(duì)象p的屬性age進(jìn)行賦值
????????????? p.age = 66;
????????????? // 0表示女生感昼,1表示男生
????????????? p.gender = 0;
????????????? //打印p的屬性height的值
????????????? System.out.println(p.weight);
????????????? p.sleep();
????????????? //表示讓p對(duì)象去執(zhí)行eat方法
????????????? p.eat();
?????? }
}
// 定義一個(gè)代表人的類
class Person {
?????? //將人的特征用屬性/成員變量來表示
?????? String name; //姓名
?????? int age; //年齡
?????? byte gender; //性別
?????? double height; //身高
?????? double weight; //體重
?????? //將人的行為用方法表示
?????? //表示吃的行為
?????? public void eat() {
????????????? System.out.println(name + "在吃東西~~~");
?????? }
?????? //表示睡的行為
?????? public void sleep() {
????????????? //局部變量
????????????? String tool = "床";
????????????? System.out.println(name + "在" + tool + "上睡覺~~~");
?????? }
}
DAY 07
1、
packagecn.tedu.object;
public classThisDemo {
?????? public static void main(String[] args) {
????????????? Student s1 = newStudent("Amy");
????????????? System.out.println("s1:"+ s1);
????????????? Student s2 = new Student("Sam");
????????????? System.out.println("s2:"+ s2);
????????????? s1.name = "Lily";
?????? }
}
class Student {
?????? String name;
?????? int age;
?????? String no; //學(xué)號(hào)
?????? //用this代替一個(gè)具體的對(duì)象
?????? // this代表當(dāng)前在活動(dòng)的對(duì)象
?????? // this在本類中調(diào)用本類中的屬性和方法
?????? public Student(String name) {
????????????? this.name = name;
????????????? // System.out.println("this:"+ this);
?????? }
?????? public Student(String name, int age) {
????????????? this.name = name;
????????????? this.age = age;
?????? }
?????? public Student(String name, int age,String no) {
????????????? // this.name = name;
????????????? // this.age = age;
????????????? // this調(diào)用的時(shí)候調(diào)用的普通的方法而不是構(gòu)造方法
????????????? // this.Student(name,age);
????????????? // this(參數(shù)列表)--- this語句
????????????? //表示調(diào)用本類中對(duì)應(yīng)形式的構(gòu)造方法
????????????? // this(name, age) ->Student(String, int);
????????????? //必須放在構(gòu)造方法的首行
????????????? this(name, age);
????????????? this.no = no;
?????? }
}
2罐脊、
packagecn.tedu.object;
public classLocalCodeDemo {
?????? public static void main(String[] args) {
????????????? int i = 8;
????????????? //定義在方法中代碼塊 --- 局部代碼塊
????????????? {
???????????????????? // j的作用范圍變小定嗓,生命周期變短,釋放內(nèi)存 -> 提高棧內(nèi)存的利用率
???????????????????? int j = 10;
???????????????????? System.out.println(i + j);
????????????? }?????
????????????? System.out.println(i);
?????? }
}
3萍桌、
packagecn.tedu.object;
public classConstructorDemo {
?????? public static void main(String[] args) {
????????????? //調(diào)用構(gòu)造方法創(chuàng)建Person對(duì)象
????????????? // Person p = new Person();
????????????? Person p = new Person("翠花");
????????????? p.name = "如花";
????????????? p.eat();
?????? }
}
class Person {
?????? String name;
?????? int age;
?????? char gender;
?????? String no; //身份證號(hào)
?????? //構(gòu)造方法 --- 創(chuàng)建對(duì)象
?????? //在類中沒有手動(dòng)指定構(gòu)造方法的時(shí)候宵溅,那么在編譯的時(shí)候會(huì)自動(dòng)添加一個(gè)無參的構(gòu)造方法
?????? //特點(diǎn):沒有返回值類型,與類同名
?????? //構(gòu)造方法可以構(gòu)成重載
?????? public Person() {
?????? }
?????? //在代碼中手動(dòng)指定了含參構(gòu)造上炎,那么就不會(huì)再默認(rèn)添加無參構(gòu)造
?????? public Person(String n) {
????????????? //遵循就近原則
????????????? name = n;
?????? }
?????? // Person p = new Person("珠子", -18);
?????? //構(gòu)造方法中可以寫return恃逻,用于規(guī)避一些不合常理的數(shù)據(jù)
?????? public Person(String n, int a) {
????????????? name = n;
????????????? if (a < 0)
???????????????????? return;
????????????? age = a;
?????? }
?????? public void eat() {
????????????? System.out.println(name + "在吃東西~~~");
?????? }
}
4、
packagecn.tedu.object;
public classConstructorCodeDemo {
?????? public static void main(String[] args) {
????????????? // Baby b1 = new Baby();
????????????? // Baby b2 = new Baby("鐵蛋");
?????? }
}
// 定義一個(gè)代表嬰兒的類
class Baby {
?????? String name;
?????? //構(gòu)造代碼塊/初始化代碼塊
?????? //無論利用哪個(gè)構(gòu)造方法創(chuàng)建對(duì)象藕施,構(gòu)造代碼塊都會(huì)先于構(gòu)造方法執(zhí)行
?????? //如果每一個(gè)構(gòu)造方法中都有一些要初始化的操作寇损,可以將它們提取到構(gòu)造代碼塊中執(zhí)行
?????? {
????????????? this.cry();
????????????? this.eat();
?????? }
?????? public Baby() {
????????????? System.out.println("running~~~");
?????? }
?????? public Baby(String name) {
????????????? // this();
????????????? this.name = name;
????????????? // this.cry();
????????????? // this.eat();
?????? }
?????? public void cry() {
????????????? System.out.println("這個(gè)嬰兒在哇哇哇的哭~~~");
?????? }
?????? public void eat() {
????????????? System.out.println("這個(gè)嬰兒在吃奶~~~");
?????? }
}
5、
packagecn.tedu.extendsx;
public classExtendsDemo {
?????? public static void main(String[] args) {
????????????? Cat c = new Cat();
????????????? //通過繼承裳食,子類可以使用父類中定義的一部分屬性和方法
????????????? c.eat();
?????? }
}
// 父類
class Pet {
?????? String name;
?????? String color;
?????? public Pet(String name) {
?????? }
?????? public Pet(String name, String color) {
?????? }
?????? public void eat() {
????????????? System.out.println("在吃東西~~~");
?????? }
}
// 利用extends關(guān)鍵字讓原來的類與提取出來的新的類產(chǎn)生了聯(lián)系 --- 繼承
// 子類
class Cat extendsPet {
?????? public Cat() {
????????????? //在子類構(gòu)造方法中矛市,如果沒有手動(dòng)指定,那么默認(rèn)添加super()
?????? ?????? //super語句 --- 表示調(diào)用父類中對(duì)應(yīng)形式的構(gòu)造方法
????????????? // super() --- Pet()
????????????? //如果父類中只提供了含參構(gòu)造
????????????? //那么子類中就必須手動(dòng)提供對(duì)應(yīng)形式的super語句
????????????? // super語句必須放在構(gòu)造方法的第一行
????????????? super("波斯貓");
?????? }
?????? public void drink() {
????????????? //通過super代表父類對(duì)象
????????????? //通過父類對(duì)象調(diào)用父類中的方法和屬性
????????????? super.eat();
????????????? System.out.println("吃完東西喝點(diǎn)水~~~");
?????? }
?????? public void catches() {
????????????? System.out.println("這只貓?jiān)趽仙嘲l(fā)玩~~~");
?????? }
}
class Dog extendsPet {
?????? public Dog() {
????????????? // super("金毛", "綠色");
????????????? super("二哈");
????????????? super.color = "黑色";
?????? }
?????? public void bark() {
????????????? System.out.println("這只狗在叫~~~");
?????? }
}
6诲祸、
packagecn.tedu.extendsx;
public classOverrideDemo {
?????? public static void main(String[] args) {
????????????? Teacher t = new Teacher();
????????????? //子類對(duì)象是調(diào)用重寫之后的方法
????????????? t.work();
?????? }
}
// 表示職業(yè)的類
class Profession {
?????? public void work() {
????????????? System.out.println("在工作~~~");
?????? }
}
class Teacherextends Profession {
?????? //父類中的方法寫的比較簡(jiǎn)單浊吏,子類需要對(duì)父類中的方法進(jìn)行擴(kuò)展
?????? @Override // @注解
?????? // @Override這個(gè)注解是用于校驗(yàn)當(dāng)前方法是否構(gòu)成了重寫
?????? public void work() {
????????????? System.out.println("這個(gè)老師在誨人不倦");
?????? }
}
7、
packagecn.tedu.fengzhuang;
public classFengzhuangExer {
?????? public static void main(String[] args) {
????????????? Rectangle r = new Rectangle(5.45,3.87);
????????????? System.out.println(r.getGirth());
????????????? System.out.println(r.getArea());
?????? }
}
// 定義一個(gè)代表矩形的類
class Rectangle {
?????? private double width; //寬
?????? private double height; //高
?????? //當(dāng)矩形定義好之后救氯,寬和高就固定下了
?????? public Rectangle(double width, doubleheight) {
????????????? //判斷寬和高是否合法
????????????? if (width <= 0 || height <=0)
???????????????????? return;
????????????? this.width = width;
????????????? this.height = height;
?????? }
?????? //矩形畫好之后寬和高不能產(chǎn)生變動(dòng)了找田,所以不需要再提供set方法
?????? public double getWidth() {
????????????? return width;
?????? }
?????? public double getHeight() {
????????????? return height;
?????? }
?????? //計(jì)算周長(zhǎng)
?????? public double getGirth() {
????????????? return 2 * (width + height);
?????? }
?????? //計(jì)算面積
?????? public double getArea() {
????????????? return width * height;
?????? }
}
8、
packagecn.tedu.fengzhuang;
public classDriverDemo {
?????? public static void main(String[] args) {
????????????? Driver d = new Driver();
????????????? // d.name = "Bob";
????????????? // d.age = -28;
????????????? d.setAge(-24);
????????????? System.out.println(d.getAge());
?????? }
}
class Driver {
?????? private String name;
?????? private /*私有的*/int age;
?????? private String no;
?????? private char gender;
?????? public String getName() {
????????????? return name;
?????? }
?????? public void setName(String name) {
????????????? this.name = name;
?????? }
?????? public int getAge() {
????????????? return age;
?????? }
?????? public void setAge(int age) {
????????????? if (age >= 18 && age<= 70)
???????????????????? this.age = age;
?????? }
?????? public String getNo() {
????????????? return no;
?????? }
?????? public void setNo(String no) {
????????????? this.no = no;
?????? }
?????? public char getGender() {
????????????? return gender;
?????? }
?????? public void setGender(char gender) {
????????????? this.gender = gender;
?????? }
}
9着憨、
packagecn.tedu.duotai;
public class DuotaiDemo{
?????? public static void main(String[] args) {
????????????? //父類聲明對(duì)象墩衙,用子類創(chuàng)建對(duì)象 --- 向上造型
????????????? //利用向上造型來創(chuàng)建的這個(gè)對(duì)象
????????????? //對(duì)象在編譯過程中并不會(huì)檢查到底使用的是哪個(gè)子類
????????????? //在編譯期間只會(huì)檢查聲明類和實(shí)現(xiàn)類之間是否有繼承關(guān)系
????????????? //直到運(yùn)行的時(shí)候才會(huì)檢查具體的子類然后根據(jù)子類來分配空間
????????????? Pet p = new Cat();
????????????? //當(dāng)使用向上造型來創(chuàng)建對(duì)象的時(shí)候,只能使用父類中聲明的方法
????????????? //而不能使用子類中單獨(dú)定義的方法
????????????? //但是方法的執(zhí)行看的是具體的子類
????????????? p.eat();
?????? }
}
class Pet {
?????? public void eat() {
????????????? System.out.println("在吃東西~~~");
?????? }
}
class Cat extendsPet {
?????? @Override
?????? public void eat() {
????????????? System.out.println("這只貓?jiān)诔圆輣~~");
?????? }
?????? public void catches() {
????????????? System.out.println("這只貓?jiān)趽瞎吠鎫~~");
?????? }
}
class Dog extendsPet {
?????? @Override
?????? public void eat() {
????????????? System.out.println("這只狗在吃貓~~~");
?????? }
?????? public void bark() {
????????????? System.out.println("這只狗在喵喵的叫~~~");
?????? }
}
DAY? 08
1、
packagecn.tedu.staticx;
public class StaticDemo1{
?????? @SuppressWarnings("static-access")
?????? public static void main(String[] args) {
????????????? //System.out.println(Student.classroom);
????????????? Student s1 = new Student();
????????????? s1.name = "段譽(yù)";
????????????? s1.classroom = "大理";
????????????? Student s2 = new Student();
????????????? s2.name = "王語嫣";
????????????? s2.classroom = "茶花山莊";
????????????? s1.study();
????????????? s2.study();
?????? }
}
// 定義代表學(xué)生的類
class Student {
?????? String name;
?????? int age;
?????? static String classroom;
?????? @SuppressWarnings("static-access")
?????? public void study() {
????????????? System.out.println(this.name +"在" + this.classroom + "教室中學(xué)習(xí)~~~");
?????? }
}
2漆改、
packagecn.tedu.staticx;
public classStaticDemo2 {
?????? @SuppressWarnings("static-access")
?????? public static void main(String[] args) {
????????????? // B.m();
????????????? //當(dāng)構(gòu)成靜態(tài)方法的隱藏的時(shí)候植袍,方法的執(zhí)行看的是聲明類
????????????? A a = new B();
????????????? a.m();
????????????? StaticDemo2 p =new StaticDemo2();
????????????? System.out.println(p.qiuhe(6));
?????? }
?????? public static int qiuhe(int i){
????????????? int j=1;
??????????????????????????? for(intk=10;(i/10!=0);){
?????????????????????????????????? i=i/10;
?????????????????????????????????? j++;
??????????????????????????? }
??????????????????????????? return j;
????????????? }
}
class A {
?????? public static void m() {
????????????? System.out.println("A~~~");
?????? }
}
class B extends A{
?????? public static void m() {
????????????? System.out.println("B~~~");
?????? }
}
3、
packagecn.tedu.staticx;
public classStaticDemo3 {
?????? public static void main(String[] args) {
????????????? new C();
????????????? // new C();
????????????? // C.m();
????????????? // C.m();
?????? }
}
class C {
?????? //靜態(tài)代碼塊
?????? //只在類加載(第一次使用)的時(shí)候執(zhí)行一次
?????? static {
????????????? System.out.println("C");
?????? }
?????? {
????????????? System.out.println("C2");
?????? }
?????? public C() {
????????????? System.out.println("C3");
?????? }
?????? public static void m() {
????????????? System.out.println("running~~~");
?????? }
}
4籽懦、
packagecn.tedu.staticx;
public classStaticDemo4 {
?????? public static void main(String[] args) {
????????????? //加載父類 --- 父類靜態(tài)
????????????? //加載子類 --- 子類靜態(tài)
????????????? //創(chuàng)建父類對(duì)象 --- 父類構(gòu)造
????????????? //創(chuàng)建子類對(duì)象 --- 子類構(gòu)造
????????????? new SB();
????????????? new SB();
?????? }
}
class SA {
?????? SD d;
?????? static {
????????????? System.out.println("A1");
?????? }
?????? {
????????????? System.out.println("A2");
????????????? d = new SD();
?????? }
?????? public SA() {
????????????? System.out.println("A3");
?????? }
}
class SB extendsSA {
?????? static SC c = new SC();
?????? static {
????????????? System.out.println("B1");
?????? }
?????? {
????????????? System.out.println("B2");
?????? }
?????? public SB() {
????????????? System.out.println("B3");
?????? }
}
class SC {
?????? public SC() {
????????????? System.out.println("C");
?????? }
}
class SD extendsSC {
?????? public SD() {
????????????? System.out.println("D");
?????? }
}
5于个、
packagecn.tedu.staticx;
public classStaticDemo5 {
?????? public static void main(String[] args) {
????????????? System.out.println(D.i);
?????? }
}
class D {
?????? static {
????????????? i = 7;
?????? }
?????? static int i = 5;
}
6、
packagecn.tedu.staticx;
public classStaticDemo5 {
?????? public static void main(String[] args) {
????????????? System.out.println(D.i);
?????? }
}
class D {
?????? static {
????????????? i = 7;
?????? }
?????? static int i = 5;
}
DAY 09
1暮顺、
package cn.tedu.abstractx;
publicclass AbstractDemo {
? publicstaticvoid main(String[] args) {
??? // 不允許被實(shí)例化
??? // Pet p = new Pet();
??? // p.eat();
??? // 創(chuàng)建了一個(gè)Pet所對(duì)應(yīng)的匿名內(nèi)部類的對(duì)象
??? // Pet p = new Pet() {
??? //
??? // @Override
??? // public void eat() {
??? //
??? // }
??? // }; // 匿名內(nèi)部類
? }
}
abstractclass Animal {
}
// 抽象類
abstractclass Pet {
? public Pet() {
? }
? // 抽象類中可以定義一切方法
? // 抽象方法
? // Pet.eat();
? publicabstractvoid eat();
? publicvoid drink() {
??? System.out.println("在喝水中~~~");
? }
}
// 子類繼承抽象類之后必須重寫其中的抽象方法,除非子類也是抽象類
abstractclass Cat extends Pet {
}
class Dog extends Pet {
? @Override
? publicvoid eat() {
??? System.out.println("這只狗在吃貓~~~");
? }
}
2厅篓、
package cn.tedu.abstractx;
publicclass AbstractExer {
? publicstaticvoid main(String[] args) {
??? // Shape s = new Rectangle(3.5,
2.4);
??? Shapes = new Square(5);
??? System.out.println(s.getArea());
??? System.out.println(s.getGirth());
? }
}
abstractclass Shape {
? publicabstractdouble getArea();
? publicabstractdouble getGirth();
}
// 代表矩形
class Rectangle extends Shape {
? privatedoublewidth;
? privatedoubleheight;
? public Rectangle(doublewidth, doubleheight) {
??? this.width = width;
??? this.height = height;
? }
? publicdouble getArea() {
??? returnwidth * height;
? }
? publicdouble getGirth() {
??? return 2 * (width + height);
? }
}
// 正方形
class Square extends Rectangle {
? public Square(doublewidth) {
??? super(width, width);
? }
}
// 橢圓形
class Oval extends Shape {
? privatedoublea;
? privatedoubleb;
? public Oval(doublea, doubleb) {
??? this.a = a;
??? this.b = b;
? }
? @Override
? publicdouble getArea() {
??? return 3.14 * a * b;
? }
? @Override
? publicdouble getGirth() {
??? return 3.14 * (a + b);
? }
}
class Circle extends Oval {
? public Circle(doubleradis) {
??? super(radis, radis);
? }
}
3、
package cn.tedu.innerclass;
publicclass InnerDemo1 {
? publicstaticvoid main(String[] args) {
??? new Outer1().m();
? }
}
class Outer1 {
? inti = 10;
? publicvoid m() {
??? System.out.println("Outer~~~");
??? // 當(dāng)方法內(nèi)部類使用所在的方法中的數(shù)據(jù)的時(shí)候
??? // 要求這個(gè)屬性得是一個(gè)常量
??? // 從JDK1.8開始捶码,方法內(nèi)部類使用到當(dāng)前方法中的數(shù)據(jù)的時(shí)候
??? // 將該數(shù)據(jù)默認(rèn)為常量
??? // 常量的隱式聲明
??? intj = 10;
??? // 方法內(nèi)部類
??? // 只能在定義它的方法中使用
??? // 可以使用外部類中的屬性和方法
??? // 如果內(nèi)部類和外部類存在了同名屬性或者方法羽氮,則使用內(nèi)部類中定義
??? // 只能用abstract/final
??? // 方法內(nèi)部類中可以定義非靜態(tài)的屬性和非靜態(tài)方法
??? // 但是不能定義靜態(tài)變量和靜態(tài)方法
??? // 然而定義靜態(tài)常量
??? class Inner1 extends Object implements Cloneable {
????? intk = 8;
????? staticfinalintx = 7;
????? publicvoid m() {
?????? System.out.println("Inner~~~");
?????? i += 5;
?????? m2();
?????? // 外部類.this.外部類的方法或者屬性
?????? Outer1.this.m2();
?????? System.out.println(j);
?????? // j += 6;
?????? System.out.println(k);
?????? System.out.println(x);
????? }
????? publicvoid m2() {
?????? System.out.println("Inner m2~~~");
????? }
??? }
??? Inner1i1 = new Inner1();
??? i1.m();
? }
? publicvoid m2() {
??? System.out.println("Outer m2~~~");
? }
}
2、
package cn.tedu.innerclass;
publicclass InnerDemo1 {
? publicstaticvoid main(String[] args) {
??? new Outer1().m();
? }
}
class Outer1 {
? inti = 10;
? publicvoid m() {
??? System.out.println("Outer~~~");
??? // 當(dāng)方法內(nèi)部類使用所在的方法中的數(shù)據(jù)的時(shí)候
??? // 要求這個(gè)屬性得是一個(gè)常量
??? // 從JDK1.8開始惫恼,方法內(nèi)部類使用到當(dāng)前方法中的數(shù)據(jù)的時(shí)候
??? // 將該數(shù)據(jù)默認(rèn)為常量
??? // 常量的隱式聲明
??? intj = 10;
??? // 方法內(nèi)部類
??? // 只能在定義它的方法中使用
??? // 可以使用外部類中的屬性和方法
??? // 如果內(nèi)部類和外部類存在了同名屬性或者方法档押,則使用內(nèi)部類中定義
??? // 只能用abstract/final
??? // 方法內(nèi)部類中可以定義非靜態(tài)的屬性和非靜態(tài)方法
??? // 但是不能定義靜態(tài)變量和靜態(tài)方法
??? // 然而定義靜態(tài)常量
??? class Inner1 extends Object implements Cloneable {
????? intk = 8;
????? staticfinalintx = 7;
????? publicvoid m() {
?????? System.out.println("Inner~~~");
?????? i += 5;
?????? m2();
?????? // 外部類.this.外部類的方法或者屬性
?????? Outer1.this.m2();
?????? System.out.println(j);
?????? // j += 6;
?????? System.out.println(k);
?????? System.out.println(x);
????? }
????? publicvoid m2() {
?????? System.out.println("Inner m2~~~");
????? }
??? }
??? Inner1i1 = new Inner1();
??? i1.m();
? }
? publicvoid m2() {
??? System.out.println("Outer m2~~~");
? }
}
3、
package cn.tedu.innerclass;
publicclass InnerDemo3 {
? publicstaticvoid main(String[] args) {
??? Outer3.Inner3oi3 = new Outer3.Inner3();
??? oi3.m();
? }
}
class Outer3 {
? inti = 0;
? // 靜態(tài)內(nèi)部類
? // 只能使用外部類中的靜態(tài)屬性和靜態(tài)方法
? // 靜態(tài)內(nèi)部類中可以定義一切的方法和屬性
? staticclass Inner3 {
??? intj = 8;
??? staticintk = 4;
??? publicvoid m() {
????? // System.out.println(i);
??? }
? }
}
4祈纯、
package cn.tedu.innerclass;
publicclass InnerDemo4 {
? publicstaticvoid main(String[] args) {
??? // 匿名內(nèi)部類
??? // a是匿名內(nèi)部類產(chǎn)生的對(duì)象
??? // 匿名內(nèi)部類實(shí)際上是實(shí)現(xiàn)了對(duì)應(yīng)的接口
??? Aa = new A() {
????? @Override
????? publicvoid m() {
?????? System.out.println("running~~~");
????? }
????? @Override
????? publicvoid m2() {
????? }
??? };
??? a.m();
??? // 匿名內(nèi)部類實(shí)際上是繼承了對(duì)應(yīng)的類
??? Bb = new B() {
????? @Override
????? publicvoid m() {
?????? System.out.println("running~~~");
????? }
??? };
??? b.m();
??? // C c = new C() {
??? // };
? }
}
interface A {
? void m();
? void m2();
}
abstractclass B {
? publicabstractvoid m();
}
finalclass C {
}
5令宿、
package cn.tedu.interfacex;
import java.io.Serializable;
publicclass InterfaceDemo {
? publicstaticvoid main(String[] args) {
??? // 接口不允許實(shí)例化
??? // Shape s = new Shape();
??? System.out.println(Shape.girth);
? }
}
interface Shape extends Cloneable, Serializable {
? // 默認(rèn)用 public static final 修飾
? staticpublicfinaldoublegirth = 0;
? // public Shape(){}
? // 接口中的方法默認(rèn)public abstract修飾
? double getGirth();
? publicdouble getArea();
}
// 利用implements關(guān)鍵字讓類和接口產(chǎn)生了聯(lián)系 --- 實(shí)現(xiàn)
// Rectangle實(shí)現(xiàn)了Shape接口
@SuppressWarnings("serial")
class Rectangle implements Shape, Cloneable {
? @Override
? publicdouble getGirth() {
??? return 0;
? }
? @Override
? publicdouble getArea() {
??? return 0;
? }
}
6.
package cn.tedu.interfacex;
publicclass InterfaceDemo2 {
? publicstaticvoid main(String[] args) {
??? // A a = new B1();
??? // 在Java中支持的是類和類之間的單繼承
??? // 所以此時(shí)會(huì)形成一棵繼承結(jié)構(gòu)樹
??? // 所以比較容易的就能確定兩個(gè)類之間是否有繼承關(guān)系
??? // 因此在進(jìn)行強(qiáng)制轉(zhuǎn)換的時(shí)候
??? // 會(huì)檢查要轉(zhuǎn)換的對(duì)象的聲明類和轉(zhuǎn)換的類型是否有繼承關(guān)系
??? // a對(duì)象的聲明類型是A類,要轉(zhuǎn)換的類型是B1
??? // B1繼承了A腕窥,所以在編譯時(shí)期就不報(bào)錯(cuò)
??? // 到了運(yùn)行的時(shí)候才會(huì)檢查對(duì)象的實(shí)際類型和要轉(zhuǎn)換的類型是否一致
??? // 運(yùn)行的時(shí)候粒没,發(fā)現(xiàn)a的實(shí)際類型是B1,要轉(zhuǎn)換的類型是B1
??? // 類型一致,允許轉(zhuǎn)換
??? // B1 b1 = (B1) a;
??? // a對(duì)象的聲明類型是A類簇爆,要轉(zhuǎn)換的類型是B2
??? // B2繼承了A癞松,所以在編譯時(shí)期就不報(bào)錯(cuò)
??? // 到了運(yùn)行的時(shí)候,a的實(shí)際類型是B1,要轉(zhuǎn)換的類型是B2
??? // 類型不一致入蛆,所以報(bào)錯(cuò) --- ClassCastException
??? // B2 b2 = (B2) a;
??? // b1對(duì)象的聲明類型B1類响蓉,要轉(zhuǎn)換的是B2
??? // B2沒有繼承B1,編譯就不通過
??? // B2 b2 = (B2) b1;
??? // C c = (C) a;
??? // 在Java中哨毁,類和接口之間是多實(shí)現(xiàn)枫甲,接口和接口之間是多繼承
??? // 所以構(gòu)成了一張圖狀結(jié)構(gòu) --- 網(wǎng)狀結(jié)構(gòu)
??? // 不容易確定兩個(gè)節(jié)點(diǎn)之間的關(guān)系
??? // 因此在編譯時(shí)期為了提高效率放棄檢查
??? // 直到運(yùn)行的時(shí)候再確定類型是否相同
??? // D d = (D) a;
??? // C c = new C();
??? // D d = (D) c;
? }
}
class A {
}
class B1 extends A {
}
class B2 extends A {
}
class C {
}
interface D {
}
7、
package cn.tedu.interfacex;
publicclass InterfaceDemo3 {
? publicstaticvoid main(String[] args) {
? ?Ee=new E();
? Calcc=(i,j)->i+j;
? Calcd=(doublei,doublej)-> {
??? returni+j;
??? };
? ?System.out.println(e.max(3, 7));
? }
}
// 如果一個(gè)接口中只定義了一個(gè)抽象方法挑庶,那么把這個(gè)接口聲明為函數(shù)式接口,接口中的默認(rèn)方法 --- 默認(rèn)是public
// 函數(shù)式接口用@FunctionalInteface
@FunctionalInterface
interface Calc {
? publicdouble add(doublei, doublej);//抽象類中的方法定義方式
? publicdefaultdouble max(doublei, doublej) {
??? returni>j ? i : j;
? }
? publicstaticdouble min(doublei, doublej) {
??? returni
? }
}
class E implementsCalc? {
? @Override
? publicdouble add(doublei, doublej) {
??? returni + j;
? }
}
8言秸、
package cn.tedu.lambda;
publicclass LambdaDemo {
? publicstaticvoid main(String[] args) {
??? // 接口中只定義了1個(gè)抽象方法
??? // 可以利用Lambda表達(dá)式來重寫這唯一的一個(gè)抽象方法
??? //Calcc = newCalc(){
??? //
??? // @Override
??? // public double add(double i,
double j) {
??? // return i + j;
??? // }
??? //
??? // };
??? // 表示重寫Calc中的唯一的一個(gè)抽象方法add
??? // Lambda表達(dá)式只能作用在函數(shù)式接口上
??? //Calcc = (double a,double b) -> {
??? // return a + b;
??? // };
??? // 方法體只有一句软能,可以省略{}和return不寫
??? // 唯一的一句方法體的計(jì)算結(jié)果默認(rèn)為當(dāng)前方法的返回值
??? //Calcc = (double i,double j) -> i + j;
??? // 重寫的是Calc接口中的方法add
??? // add方法的參數(shù)列表的類型是已知的
??? // 可以省略參數(shù)類型不寫
??? // 函數(shù)式編程
??? Calcc = (x, y) ->x + y;
??? System.out.println(c.add(5.8, 9.47));
? }
}
interface Calc {
? double add(doublei, doublej);
}
9迎捺、
package cn.tedu.lambda;
publicclass LambdaDemo2 {
? publicstaticvoid main(String[] args) {
??? // 方法體只有1句
??? // 這一句方法體是直接操作參數(shù)
??? // 這一句方法體是調(diào)用了已有類Math中的靜態(tài)方法sqrt
??? // 參數(shù)列表可以省略
??? // Calculator c = d ->
Math.sqrt(d);
??? Calculatorc = Math::sqrt;
??? System.out.println(c.sqrt(9));
? }
}
interface Calculator {
? double sqrt(doubled);
}package cn.tedu.lambda;
publicclass LambdaDemo2 {
? publicstaticvoid main(String[] args) {
??? // 方法體只有1句
??? // 這一句方法體是直接操作參數(shù)
??? // 這一句方法體是調(diào)用了已有類Math中的靜態(tài)方法sqrt
??? // 參數(shù)列表可以省略
??? // Calculator c = d ->
Math.sqrt(d);
??? Calculatorc = Math::sqrt;
??? System.out.println(c.sqrt(9));
? }
}
interface Calculator {
? double sqrt(doubled);
}
10、
packagecn.tedu.packagex;
// * 通配符
// * 表示導(dǎo)入當(dāng)前包下的所有的類但是不包括子包下的類
importjava.util.*;
public classPackageDemo {
? @SuppressWarnings("resource")
? public static void main(String[] args) {
??? Scanner s = new Scanner(System.in);
??? int n = s.nextInt();
??? int[] arr = new int[n];
??? for (int i = 0; i < n; i++) {
????? arr[i] = s.nextInt();
??? }
??? Arrays.sort(arr);
? }
}
11查排、
package cn.tedu.reiew;
publicclass StaticDemo {
? publicstaticvoid main(String[] args) {
??? System.out.println(A.i);
? ? System.out.println(A.j);
? }
}
class A {
? // 先加載a,i,j
? // 其中a先標(biāo)記為null凳枝,i和j標(biāo)記為0
? // 進(jìn)行初始化操作
? // 先執(zhí)行 static A a = new A();
? // 這個(gè)時(shí)候a的具體地址來覆蓋掉標(biāo)記的null
? // a的實(shí)際對(duì)象是存在堆內(nèi)存中,然后方法區(qū)中存儲(chǔ)a的地址
? // 創(chuàng)建a對(duì)象那么就得執(zhí)行a的構(gòu)造方法
? // 意味著要執(zhí)行i++,j++,在創(chuàng)建對(duì)象將標(biāo)記值先認(rèn)為是默認(rèn)值
? // i->1 j->1
? // a的構(gòu)造方法執(zhí)行完成,然后初始化i和j
? // i = 5;利用實(shí)際數(shù)據(jù)5覆蓋掉標(biāo)記值1
? // 注意:在類加載過程中不允許計(jì)算標(biāo)記值/
? // 但是在創(chuàng)建對(duì)象或者其他方式使用的時(shí)候會(huì)將標(biāo)記值認(rèn)為是默認(rèn)值使用
? static A a = new A();
? staticinti = 5;
? staticintj;
? public A() {
??? i++;
??? j++;
??? System.out.println(i);
??? System.out.println(j);
? }
}
DAY 10
1.
package cn.tedu.reiew;
publicclass StaticDemo {
? publicstaticvoid main(String[] args) {
??? System.out.println(A.i);
??? System.out.println(A.j);
? }
}
class A {
? // 先加載a,i,j
? // 其中a先標(biāo)記為null岖瑰,i和j標(biāo)記為0
? // 進(jìn)行初始化操作
? // 先執(zhí)行 static A a = new A();
? // 這個(gè)時(shí)候a的具體地址來覆蓋掉標(biāo)記的null
? // a的實(shí)際對(duì)象是存在堆內(nèi)存中叛买,然后方法區(qū)中存儲(chǔ)a的地址
? // 創(chuàng)建a對(duì)象那么就得執(zhí)行a的構(gòu)造方法
? // 意味著要執(zhí)行i++,j++,在創(chuàng)建對(duì)象將標(biāo)記值先認(rèn)為是默認(rèn)值
? // i->1 j->1
? // a的構(gòu)造方法執(zhí)行完成,然后初始化i和j
? // i = 5;利用實(shí)際數(shù)據(jù)5覆蓋掉標(biāo)記值1
? // 注意:在類加載過程中不允許計(jì)算標(biāo)記值/
? // 但是在創(chuàng)建對(duì)象或者其他方式使用的時(shí)候會(huì)將標(biāo)記值認(rèn)為是默認(rèn)值使用
? static A a = new A();
? staticinti = 5;
? staticintj;
? public A() {
??? i++;
??? j++;
??? System.out.println(i);
??? System.out.println(j);
? }
}
2.
package cn.tedu.object;
publicclass ObjectDemo2 {
? publicstaticvoid main(String[] args) {
??? // hashCode --- 哈希碼
??? // 哈希碼是根據(jù)哈希散列算法計(jì)算出來的
??? // 哈希散列算法保證同一個(gè)類產(chǎn)生的對(duì)象的哈希碼能夠是散列且比較均勻的分布在43億值上
??? // 產(chǎn)生重合的概率是相對(duì)較小的蹋订,因此人為的認(rèn)為對(duì)象的哈希碼是唯一的
??? // 在存儲(chǔ)對(duì)象的時(shí)候會(huì)將對(duì)象的哈希碼作為元素的內(nèi)存地址表示
??? // System.out.println(new
Object().hashCode());
??? // System.out.println(new
Object().hashCode());
??? // System.out.println(new
Object().hashCode());
??? // System.out.println(new
Object().hashCode());
??? Objecto = newObject();
??? // 默認(rèn)是打印對(duì)象的 類型@地址 的形式
??? System.out.println(o.toString());
??? // 直接打印對(duì)象是在底層調(diào)用了對(duì)象的toString
??? System.out.println(o);
??? Students = new Student();
??? System.out.println(s);
? }
}
class Student {
? private String name;
? privateintage;
? public String getName() {
??? returnname;
? }
? publicvoid setName(String name) {
??? this.name = name;
? }
? publicint getAge() {
??? returnage;
? }
? publicvoid setAge(intage) {
??? this.age = age;
? }
? @Override
? public String toString() {
??? return"Student [name=" + name + ", age=" + age + "]";
? }
? // @Override
? // public String toString() {
? // return "name:" +name + "\r\nage:" + age;
? // }
}
3.
package cn.tedu.object;
publicclass ObjectDemo3 {
? publicstaticvoid main(String[] args) {
??? Personp1 = newPerson();
??? // p1.name = "Amy";
??? p1.name = null;
??? p1.age = 15;
??? p1.gender = '女';
??? Personp2 = newPerson();
??? p2.name = null;
??? p2.age = 15;
??? p2.gender = '女';
??? // 底層默認(rèn)使用==進(jìn)行比較 --- 比較兩個(gè)對(duì)象的地址是否一樣
??? System.out.println(p1.equals(p2));
? }
}
classPerson {
? Stringname;
? intage;
? chargender;
? @Override
? publicboolean equals(Object obj) {
??? // 判斷地址是否一樣
??? if (this == obj)
????? returntrue;
??? // 判斷參數(shù)是否為空
??? if (obj == null)
????? returnfalse;
??? // 判斷類型是否一致
??? if (this.getClass() != obj.getClass())
????? returnfalse;
??? // 判斷屬性值
??? Personp = (Person) obj;
??? // 判斷屬性age是否一致
??? if (this.age != p.age)
????? returnfalse;
??? // 判斷屬性gender是否一致
??? if (this.gender != p.gender)
????? returnfalse;
??? // 判斷屬性name是否一致
??? if (this.name == null) {
????? if (p.name != null)
?????? returnfalse;
??? }elseif (!this.name.equals(p.name))
????? returnfalse;
??? returntrue;
? }
}
4.
package cn.tedu.object;
publicclass ObjectDemo4 {
? publicstaticvoid main(String[] args) {
??? // 不是內(nèi)部類率挣,不會(huì)產(chǎn)生class文件
??? //Calcc = (i, j) -> i+ j;
??? Objectc = (Calc) (i, j) ->i + j;
??? // Object c = newCalc() {
??? //
??? // @Override
??? // public double add(double i,
double j) {
??? // return i + j;
??? // }
??? // };
??? System.out.println(c.getClass());
? }
}
interface Calc {
? publicdouble add(doublei, doublej);
}
5.
package cn.tedu.object;
publicclass ObjectExer {
}
class User {
? private String username;
? private String password;
? public String getUsername() {
??? returnusername;
? }
? publicvoid setUsername(String username) {
??? this.username = username;
? }
? public String getPassword() {
??? returnpassword;
? }
? publicvoid setPassword(String password) {
??? this.password = password;
? }
? // hashCode的重寫:
? // 如果兩個(gè)對(duì)象equals為true,那么哈希碼一致
? // 不同對(duì)象的哈希碼要不同并且要做到散列分布
? @Override
? publicint hashCode() {
??? finalintprime = 31;
??? intresult = 1;
??? result = prime * result + ((password == null) ? 0 : password.hashCode());
??? result = prime * result + ((username == null) ? 0 : username.hashCode());
??? returnresult;
? }
? @Override
? publicboolean equals(Object obj) {
??? if (this == obj)
????? returntrue;
??? if (obj == null)
????? returnfalse;
??? if (getClass() != obj.getClass())
????? returnfalse;
??? Userother = (User) obj;
??? if (password == null) {
????? if (other.password != null)
?????? returnfalse;
??? }elseif (!password.equals(other.password))
????? returnfalse;
??? if (username == null) {
????? if (other.username != null)
?????? returnfalse;
??? }elseif (!username.equals(other.username))
????? returnfalse;
??? returntrue;
? }
? // @Override
? // public boolean equals(Objectobj){
? //
? // // 判斷地址是否一致
? // if (this ==obj)
? // return true;
? //
? // // 判斷參數(shù)是否為空
? // if (obj== null)
? // return false;
? //
? // // 判斷類型是否一致
? // if (this.getClass() !=
obj.getClass())
? // return false;
? //
? // // 判斷屬性是否一致
? // User user = (User)obj;
? //
? // if (this.username == null) {
? // if (user.username != null)
? // return false;
? // } else if
(!this.username.equals(user.username))
? // return false;
? //
? // if (this.password == null) {
? // if (user.password != null)
? // return false;
? // } else if
(!this.password.equals(user.password))
? // return false;
? //
? // return true;
? //
? // }
}
6.package cn.tedu.string;
publicclass StringDemo {
? publicstaticvoid main(String[] args) {
??? // Stringstr= "abc";
??? //str= "def";
??? // System.out.println(str);
??? // s1指向方法區(qū)
??? Strings1 = "ab";
??? // s2指向堆內(nèi)存露戒,堆內(nèi)存指向方法區(qū)
??? Strings2 = new String("ab");
??? // 字符串在方法區(qū)中只存放一份
??? // 后續(xù)使用到值相等的字符串的時(shí)候使用的是同一個(gè)
??? Strings3 = "ab";
??? // "a"和"b"是兩個(gè)字面量
??? // 字面量在參與運(yùn)算的時(shí)候?yàn)榱颂岣咝试诰幾g時(shí)期就會(huì)運(yùn)算
??? // String s4 = "a" +"b"; -> String s4 = "ab";
??? Strings4 = "a" + "b";
??? // s5 = s5 + "b";不會(huì)優(yōu)化
??? // 實(shí)際上底層是利用了StringBuilder中的append方法來完成
??? Strings5 = "a";
??? // s5 = new
StringBuilder(s5).append("b").toString();
??? // s5最后指向堆內(nèi)存椒功,堆內(nèi)存再指向方法區(qū)
??? s5 = s5 + "b";
??? System.out.println(s1 == s2);
??? System.out.println(s1 == s3);
??? System.out.println(s1 == s4);
??? System.out.println(s1 == s5);
??? System.out.println(s2 == s5);
? }
}
7.
package cn.tedu.string;
publicclass StringDemo2 {
? publicstaticvoid main(String[] args) {
??? // 表示獲取從1970-01-01 00:00:00到現(xiàn)在的毫秒值
??? longbegin= System.currentTimeMillis();
??? // Stringstr="";
??? // for (inti = 0; i <100000; i++) {
??? //str+= "a";
??? // }
??? StringBuildersb = newStringBuilder();
??? for (inti = 0; i< 100000000; i++) {
????? sb.append("a");
??? }
??? // Stringstr=sb.toString();
??? longend= System.currentTimeMillis();
??? System.out.println(end - begin);
? }
}
8.
package cn.tedu.string;
publicclass StringDemo3 {
? publicstaticvoid main(String[] args) {
??? // Stringstr= "vhaovldasnoasbo";
??? // 獲取字符串的長(zhǎng)度
??? //
System.out.println(str.length());
??? // 通過指定的下標(biāo)獲取字符串對(duì)應(yīng)位置上的字符
??? // char c = str.charAt(4);
??? // System.out.println(c);
??? // 將字符串轉(zhuǎn)化為字符數(shù)組形式
??? // char[]cs=str.toCharArray();
??? // for (char c :cs) {
??? // System.out.println(c);
??? // }
??? char[] cs = { 'd', 'e', 'g', 'y', 'c', 'r', 'n', 'u', 'a', 'u' };
??? // 將字符數(shù)組轉(zhuǎn)化為字符串
??? // Stringstr= newString(cs);
??? Stringstr = new String(cs, 3, 5);
??? System.out.println(str);
? }
}
9.
package cn.tedu.string;
import java.util.Scanner;
publicclass StringExer {
? @SuppressWarnings("resource")
? publicstaticvoid main(String[] args) {
??? Scanners = new Scanner(System.in);
??? Stringstr = s.next();
??? intbegin = s.nextInt();
??? intend = s.nextInt();
??? Stringsub = subString(str, begin, end);
??? System.out.println(sub);
? }
publicstatic String subString(String str, intbegin, intend) {
??? // 判斷參數(shù)是否為空
??? if (str == null)
????? returnnull;
??? // 判斷起始下標(biāo)
??? if (begin< 0 || begin>= str.length() || begin>end)
????? returnnull;
??? // 判斷結(jié)束下標(biāo)
??? if(end< 0 || end>= str.length())
????? returnnull;
??? char[] cs = str.toCharArray();
??? Stringsub = new String(cs, begin, end - begin);
??? returnsub;
? }
}