日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java面向对象编程(基础部分)

發布時間:2023/12/4 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面向对象编程(基础部分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面向對象編程(基礎部分)

類與對象

01:

public class ObjectWorkDemo {public static void main(String[] args){Cat cat1 = new Cat();cat1.name = "Tom";cat1.age = 3;cat1.color = "white";Cat cat2 = new Cat();cat2.name = "xiaohua";cat2.age = 100;cat2.color = "flower";} }class Cat {String name;int age;String color; }

對象內存布局

屬性/成員變量

注意事項和細節說明

01:

public class PropertiesDetail {public static void main(String[] args){Person p1 = new Person();//p1 對象引用 Person() 才是真正的數據空間(真正的對象)} }class Person {int age;String name;double sal;boolean isPass; }

創建對象

創建過程

小練習

成員方法

public class PersonWorkDemo {public static void main(String [] args){Person p1 = new Person();p1.speak();p1.cal01();p1.cal02(5);int res = p1.getSum(10,5);System.out.println(res);} }class Person{String name;int age;public void speak(){System.out.println("I am good person");}public void cal01(){int res = 0;for (int i = 1;i<=1000;i++){res+=i;}System.out.println(res);}public void cal02(int n){int res = 0;for (int i = 1;i<=n;i++){res+=i;}System.out.println(res);}public int getSum(int a,int b){return a+b;}}

方法調用機制

成員方法的好處

  • 提高代碼的復用性

  • 可以將實現的細節封裝起來,然后供其他用戶來調用即可

成員方法的定義

注意事項和使用細節

小練習

01:

public class TestWork {public static void main(String [] args){AA a = new AA();boolean b = a.isOdd(1);if (b) System.out.println("yes");else System.out.println("no");} }class AA {public boolean isOdd(int num){if num%2!=0?true:false;}public void print(int row,int col,char c){for (int i = 0;i<row;i++){for (int j = 0;j<col;j++){System.out.print(c);}System.out.println();}} }

成員方法傳參機制

  • 基本數據類型,傳遞的是值(值拷貝),形參的任何改變不影響實參

01:

public class MethodParameter01 {public static void main(String[] args){int a = 10;int b = 20;AA object = new AA();object.swap(a,b);System.out.println("a = "+a+" b = "+b);//a = 10 b = 20} }class AA {public void swap(int a,int b){System.out.println("a = "+a+" b = "+b);//a = 10 b = 20int tmp = a;a = b;b = tmp;System.out.println("Later a = "+a+" b = "+b);//a = 20 b = 10} }

  • 引用類型傳遞的是地址(傳遞也是值,但是值是地址),可以通過形參影響實參

02:

public class MethodParameter02 {public static void main(String[] args){B b = new B(); int [] arr = {1,2,3};b.test100(arr);System.out.println("main:");for (int i = 0;i<arr.length;i++){System.out.print(arr[i]+"\t");//200 2 3}System.out.println();Person p = new Person();p.name = "Tom";p.age = 10;b.test200(p);System.out.println("main age = "+p.age);//1000} }class Person {String name;int age; }class B {public void test200(Person p){p.age = 1000;}public void test100(int [] arr){arr[0] = 200;for (int i = 0;i<arr.length;i++){System.out.print(arr[i]+"\t");//200 2 3}System.out.println();} }

這里的"tom"p會被當做垃圾銷毀掉

小練習

public class TestDemo {public static void main(String[] args){Person p = new Person();p.name = "Jack";p.age = 30;MyTools myT = new MyTools();Person p2 = myT.copyPerson(p);System.out.println(p==p2);//false} }class Person {String name;int age; }class MyTools {public Person copyPerson (Person p){Person p2 = new Person();p2.name = p.name;p2.age = p.age;return p2;} }

如果此時修改p2.name,并不會改變p.name,p2.name會指向一個新地址

方法遞歸調用

遞歸舉例

01:

public class Recursion01 {public static void main(String [] args){T t1 = new T();t1.test(4);} }class T {public void test(int n){if (n>2){test(n-1);}System.out.println("n = "+n);} }//n = 2 //n = 3 //n = 4

02:

public class Recursion01 {public static void main(String [] args){T t1 = new T();t1.test(4);} }class T {public void test(int n){if (n>2){test(n-1);}else{System.out.println("n = "+n);}} }//n = 2

03:

public class Recursion01 {public static void main(String [] args){T t1 = new T();int res = t1.factorial(5);System.out.println(res);//120} }class T {public int factorial(int n){if (n==1){return 1;}else{return factorial(n-1)*n;}} }

遞歸重要規則

小練習

01:

class T {public int fab(int n){if (n>=1){if (n==1 || n==2){return 1;}else{return fab(n-1)+fab(n-2);}}else{System.out.println("Input Error");return -1;}} }

02:

class T {public int peach(int day){if (day==10){return 1;}else if (day >= 1 && day <= 9){return (peach(day+1)+1)*2;}else{System.out.println("day在1-10");return -1;}} }

老鼠出迷宮

03:

!

漢諾塔

八皇后

略!

方法重載

案例

01:

class MyCalculator {public int calculate(int n1,int n2){return n1+n2;}public double calculate(int n1,double n2){return n1+n2;}public double calculate(double n2,int n1){return n1+n2;}public int calculate(double n1,int n2,int n3){return n1+n2+n3;} }

注意事項和使用細節

小練習

01:

01:

public class Test {public static void main(String[] args){Methods obj = new Methods();obj.m(8);obj.m(8,6);obj.m("dadas");} }class Methods {public void m(int n){System.out.println(n*n);}public void m(int n1,int n2){System.out.println(n1*n2);}public void m(String str){System.out.println(str);} }

02:

public class Test {public static void main(String[] args){Methods obj = new Methods();} }class Methods {public int findMax(int n1,int n2){return n1>n2?n1:n2;}public double findMax(double n1,double n2){return n1>n2?n1:n2;}public double findMax(double n1,double n2,double n3){double max1 = n1>n2?n1:n2;double max2 = max1>n3?max1:n3;return max2;} }

可變參數

案例

01:

public VariableParameter01 {public static void main(String[] args){HspMethod obj = new HspMethod;int res = obj.sum(1,5,100);System.out.println(res);//106} }class HspMethod {public int sum(int... nums){int sum =0 ;for (int i = 0;i<nums.length;i++){sum+=nums[i];}return sum;} }

注意事項和使用細節

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5wXf9jxM-1634262458757)(C:\Users\Tom\AppData\Roaming\Typora\typora-user-images\image-20210912133042199.png)]

  • 可變參數的實參可以為數組

01:

public class VariableParameterDetail {public static void(String[] args){int[] arr = {1,2,3};T t1 = new T();t1.f1(arr);} }class T {public void f1(int... nums){System.out.println(nums.length);//3} }
  • 可變參數可以和普通類型的參數一起放在形參列表,但必須保證可變參數在最后

01:

class T {public void f2(double str,double...nums){} }
  • 一個形參列表中只能出現一個可變參數
public int sum(String str,int... nums01,String... nums02);//Error

小練習

01:

public class HspMethod {public String showScore(String name,double... scores){double totalScore = 0;for (int i = 0;i<scores.length;i++){totalScore+=scores[i];}return name+scores.length+totalScore;} }

作用域

注意事項和使用細節

  • 屬性和局部變量可以重名,訪問時遵循就近原則

01:

public class ScopeDemo {public static void main(String[] args){} }class Person {String name = "Tom";public void say(){String name = "king";System.out.println("say() name = "+name);//say() name = king} }

02:

public class ScopeDemo {public static void main(String[] args){} }class Person {String name = "Tom";public void say(){// String name = "king";System.out.println("say() name = "+name);//say() name = Tom} }
  • 在同一個作用域中,比如在同一個成員方法中,兩個局部變量,不能重名

01:

public class ScopeDemo {public static void main(String[] args){} }class Person {String address = "beijin";//String address = "guanzhou";//Error 重復定義String name = "hsp";}

01:

public class ScopeDemo {public static void main(String[] args){Person p1 = new Person();p1.say();//當執行say()方法時,say方法的局部變量比如name會創建,當say執行完畢后,name局部變量銷毀,但是屬性(全局變量)仍然可以使用} }class Person {String name = "Tom";public void say(){String name = "king";System.out.println("say() name = "+name);} }
  • 作用域范圍不同
class T {public void test(){Person p1 = new Person();System.out.println(p1.name);}public void test02(Person p){System.out.println(p.name);} }class Person {String name = "jack"; }

構造方法/構造器

  • 案例

01:

public class Constructor01 {public static void main(String[] args){Person p1 = new Person("jack",80);System.out.println(p1.name+" "+p1.age);} }class Person {String name;int age;public Person(String pName,int pAge){name = pName;age = pAge;} }

注意事項和使用細節

小練習

01:

public class Constructor01 {public static void main(String[] args){} }class Person {String name;int age;public Person(){age = 18;}public Person(String pName,int pAge){name = pName;age = pAge;} }

對象創建的流程分析

javap

  • P243

this關鍵字

01:

public class This01 {public static void main(String[] args){Dog dog1 = new Dog("大壯",3);dog1.info();} }class Dog {String name;int age;// public Dog(String dName,int dAge)// {// name = dName;// age = dAge;// }public Dog(String name,int age){this.name = name;this.age = age;}public void info(){System.out.println(name+" "+age+" ");} }

public class This01 {public static void main(String[] args){Dog dog1 = new Dog("大壯",3);System.out.println("dog1的hashcode = "+dog1.hashCode());dog1.info();Dog dog2 = new Dog("小東",7);System.out.println("dog1的hashcode = "+dog2.hashCode());dog2.info();} }class Dog {String name;int age;// public Dog(String dName,int dAge)// {// name = dName;// age = dAge;// }public Dog(String name,int age){this.name = name;this.age = age;System.out.println("this.hashCode = "+this.hashCode());}public void info(){System.out.println(name+" "+age+" ");} }

this使用細節

01:

class T {public void f1(){System.out.println("f1ok");}public void f2(){System.out.println("f2ok");f1();this.f1();} }

02:

class T {public T(){this("jack",100);System.out.println("T() 構造器");//在這里訪問T(String name,int age)//this("jack",100);//ERROR 注意:如果有this(參數列表);必須放在第一條語句}public T(String name,int age){System.out.println("T(String name,int age)構造器");}}

案例

01:

public class TestPerson {public static void main(String[] args){} }class Person {String name;int age;public Person(String name,int age){this.name = name;this.age = age;}public boolean compareTo(Person p){return this.name.equals(p.name) && this.age==p.age;} });System.out.println("dog1的hashcode = "+dog2.hashCode());dog2.info();} }

總結

以上是生活随笔為你收集整理的Java面向对象编程(基础部分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。