2023.3.23-Java-論“去賺大錢(qián)”的時(shí)候在公司里如何judge同事的工作
你的程序造型有點(diǎn)扁平啊,多態(tài)性也不行,雜亂無(wú)章,類(lèi)之間的繼承毫無(wú)造型上的美感……

import java.util.Random;
public class Main {
? ?public static void main(String[] args) {
? ? ? ?StringPrinter mySP = new StringPrinter();
? ? ? ?mySP.append("Hello");
? ? ? ?mySP.append(" there");
? ? ? ?mySP.print();
? ? ? ?Figure fig = new Figure(3,3);
? ? ? ?Rectangle rect = new Rectangle(10,6);
? ? ? ?System.out.println("Area is "+fig.area());
? ? ? ?System.out.println("Area is "+rect.area());
? ? ? ?//Lambda表達(dá)式的寫(xiě)法
? ? ? ?System.out.println("Lambda表達(dá)式寫(xiě)法");
? ? ? ?new Random().ints(3)
? ? ? ? ? ? ? ?.map(i->Math.abs(i))
? ? ? ? ? ? ? ?.forEach(i->System.out.println(i));
? ? ? ?//::方法引用
? ? ? ?System.out.println("::方法引用");
? ? ? ?new Random().ints(3)
? ? ? ? ? ? ? ?.map(Math::abs)
? ? ? ? ? ? ? ?.forEach(System.out::println);
? ? ? ?Art art = new Cartoon();//發(fā)生一個(gè)構(gòu)造函數(shù)的鏈?zhǔn)椒磻?yīng)。
? ? ? ?Employee emp1 = new Employee("lala",222333);
? ? ? ?Employee emp2 = new Employee();
? ? ? ?System.out.println("emp1's ID: "+emp1.id);
? ? ? ?System.out.println("emp2's ID: "+emp2.id);
? ?}
}
class StringWrapper{
? ?String s = new String("");
? ?public void append(String a) {s += a;}
}
class StringPrinter extends StringWrapper{
? ?public void print(){
? ? ? ?System.out.println("s="+s);
? ?}
}//給StringWrapper增加了一個(gè)新的print方法,extends的含義很明顯,給原來(lái)的類(lèi)寫(xiě)拓展。
class Figure{
? ?double dim1;
? ?double dim2;
? ?Figure(double a, double b){
? ? ? ?dim1=a;
? ? ? ?dim2=b;
? ?}
? ?Double area(){
? ? ? ?System.out.println("Area for figure");
? ? ? ?return(dim1*dim2);
? ?}
}
class Rectangle extends Figure{
? ?Rectangle(double a, double b){
? ? ? ?super(a,b);
? ?}
? ?Double area(){
? ? ? ?System.out.println("Area for rectangle");
? ? ? ?return(dim1*dim2);
? ?}
}
class Art{
? ?public Art(){
? ? ? ?System.out.println("Art constructor");
? ?}
}
class Drawing extends Art{
? ?public Drawing(){
? ? ? ?System.out.println("Drawing constructor");
? ?}
}
class Cartoon extends Drawing{
? ?public Cartoon(){
? ? ? ?System.out.println("Cartoon constructor");
? ?}
}
class Employee{
? ?public Employee(String n, double s){
? ? ? ?name = n;
? ? ? ?salary=s;
? ?}
? ?public Employee(){
? ? ? ?name = "";
? ? ? ?salary = 0;
? ?}
? ?//對(duì)象初始化塊
? ?{
? ? ? ?id = nextid;
? ? ? ?nextid++;
? ?}
? ?private String name;
? ?private double salary;
? ?public int id;
? ?private static int nextid=888;//靜態(tài)static的任何東西,只在虛擬機(jī)被裝載的最開(kāi)始初始化一遍(優(yōu)先程度很高)。之后,一直調(diào)用同一個(gè)東西。
}


D:\SoftwareSet\Java\JDK19\jdk-19.0.2\bin\java.exe -javaagent:C:\Users\guhz\AppData\Local\JetBrains\IdeaIC2022.3\testAgent\intellij-coverage-agent-1.0.682.jar=C:\Users\guhz\AppData\Local\Temp\coverageargs -Didea.new.sampling.coverage=true -Dcoverage.ignore.private.constructor.util.class=true "-javaagent:D:\SoftwareSet\Java\javaIDE(jetbrains)\installPath\IntelliJ IDEA Community Edition 2022.3.2\lib\idea_rt.jar=13836:D:\SoftwareSet\Java\javaIDE(jetbrains)\installPath\IntelliJ IDEA Community Edition 2022.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\AllData\mess\2023_Java_lecture\上課抄代碼\2023年3月23日\(chéng)untitled\out\production\untitled Main
---- IntelliJ IDEA coverage runner ----?
sampling ...
include patterns:
exclude annotations patterns:
.*Generated.*
s=Hello there
Area for figure
Area is 9.0
Area for rectangle
Area is 60.0
Lambda表達(dá)式寫(xiě)法
2001558292
1937687782
528340522
::方法引用
805472154
10093593
911256880
Art constructor
Drawing constructor
Cartoon constructor
emp1's ID: 888
emp2's ID: 889
Class transformation time: 0.0140461s for 125 classes or 1.1236880000000001E-4s per class
Process finished with exit code 0

筆記部分
/*
Java不支持多重繼承,但是它支持接口。接口使得Java獲得了多重繼承的優(yōu)點(diǎn),且摒棄了相應(yīng)的缺點(diǎn)。
Java只支持繼承一個(gè)父類(lèi)(單繼承)。
接口:implements?接口名稱(chēng)列表。
立體化編程,分層,子類(lèi)和父類(lèi),部分和整體。扁平化的編程意思是,把所有的功能平鋪開(kāi)來(lái),沒(méi)有很好地被歸類(lèi)。
Object類(lèi),Java中所有類(lèi)的根。所有類(lèi)都是Object類(lèi)的子類(lèi)。
Runtime類(lèi),Java程序的運(yùn)行環(huán)境??梢栽L問(wèn)運(yùn)行環(huán)境的比如內(nèi)存,垃圾回收,處理器。
方法繼承、覆蓋與重載
Inheritance(繼承父類(lèi)的方法)
Overriding(子類(lèi)定義同名方法覆蓋父類(lèi)的方法,多態(tài)技術(shù)的一個(gè)實(shí)現(xiàn)。)
在子類(lèi)中覆寫(xiě)父類(lèi)的方法,會(huì)影響父類(lèi)的對(duì)象。子類(lèi)中添加同名的字段(變量名),會(huì)直接替換父類(lèi)的字段,產(chǎn)生影響。
方法覆蓋的情形:
1?父類(lèi)要求子類(lèi)寫(xiě)(抽象類(lèi));
2?方法不適合子類(lèi),需要重寫(xiě)。
方法重載(overloading):
相同函數(shù)名,但是輸入?yún)?shù)不同,那么被判定為方法重載。
Java 8允許使用“::”關(guān)鍵字訪問(wèn)類(lèi)的構(gòu)造方法、對(duì)象方法、靜態(tài)方法。
方法調(diào)用棧(應(yīng)用情形,遞歸Recursion)
before看到return or last line or throw error->堆棧
after that,?彈出棧。
控制符和修飾符(比如public static final)
訪問(wèn)控制符:public, defaut(無(wú)關(guān)鍵字), protected, private.
設(shè)定了客戶端程序員可以使用和不可以使用的界限。public class是公共訪問(wèn),protected是保護(hù)訪問(wèn)。private protected是私有保護(hù)訪問(wèn)。private是私有訪問(wèn)。
defaut的類(lèi),則具有缺省的訪問(wèn)控制特性。只能被同一個(gè)包的類(lèi)訪問(wèn)調(diào)用,而不能被其他包使用。
類(lèi)的修飾符:abstract, final
abstract:?在定義抽象類(lèi),接口的時(shí)候大量使用。
用private修飾的屬性或方法不能被繼承。是父類(lèi)私有的。
構(gòu)造函數(shù)(構(gòu)造方法)->完成類(lèi)的初始化的函數(shù),返回自身。
比如new的時(shí)候,調(diào)用了一個(gè)構(gòu)造函數(shù)。
很多時(shí)候,我們?cè)趯?xiě)類(lèi)的時(shí)候,有的時(shí)候并沒(méi)有定義構(gòu)造函數(shù),這個(gè)時(shí)候系統(tǒng)會(huì)自動(dòng)為它生成一個(gè)默認(rèn)的構(gòu)造函數(shù)。這個(gè)構(gòu)造函數(shù)與類(lèi)的名稱(chēng)相同,但是不完成任何操作。
構(gòu)造函數(shù)只運(yùn)行一次。
翻譯問(wèn)題,構(gòu)造函數(shù)也稱(chēng)為構(gòu)造器。
1?要避免在類(lèi)的構(gòu)造器中初始化其他類(lèi);
2?避免在構(gòu)造器中對(duì)靜態(tài)變量賦值;
3?不要在構(gòu)造器中創(chuàng)建類(lèi)的實(shí)例;
4?訪問(wèn)權(quán)限修飾符對(duì)構(gòu)造方法的重載不影響。
初始化塊(代碼塊)首先被執(zhí)行,然后構(gòu)造函數(shù)的主體部分被執(zhí)行。初始化塊是構(gòu)造器的補(bǔ)充。
靜態(tài)初始化塊,使用static定義。這種塊只在虛擬機(jī)裝載的時(shí)候被運(yùn)行一次,之后沿用第一遍運(yùn)行的成果。
多態(tài)性(Polymorphism)->簡(jiǎn)單工廠模式。多態(tài)提高了程序的可擴(kuò)充性。
構(gòu)造出來(lái)的類(lèi)的對(duì)象,可以關(guān)聯(lián)到其他類(lèi)的方法(excute),這些類(lèi)可被關(guān)聯(lián)的條件是,這些類(lèi)有繼承關(guān)系。
上溯造型(Upcasting)和下溯造型(Downcasting)
上溯:派生類(lèi)到基類(lèi)的上傳總是安全的,因?yàn)橹皇前岩粋€(gè)具體類(lèi)型轉(zhuǎn)換為更加一般的類(lèi)型。具體所包含的東西往往更加具體,是一般所不具有的。
下溯:把新寫(xiě)的代碼繼承過(guò)來(lái),實(shí)現(xiàn)多態(tài)地?cái)U(kuò)充功能。
比如,Vehicle?底下有?Car?和?Truck,要給Car補(bǔ)充功能的時(shí)候,遵循上一級(jí)傳遞的原則,把Vehicle傳遞出去,給Vehicle寫(xiě)新的功能,這樣Car和Truck就都可以用了。這是一個(gè)多態(tài)性的基本思想。
*/