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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java学习笔记八

發(fā)布時(shí)間:2024/2/28 java 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习笔记八 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


31.

import語(yǔ)句不僅可以導(dǎo)入類,還增加了導(dǎo)入靜態(tài)方法和靜態(tài)域的功能,當(dāng)使用這些方法時(shí)就可以不用加前綴,當(dāng)然,這樣可能不利于程序的清晰度,但是對(duì)于笨重的靜態(tài)方法來(lái)說(shuō)是值得用的,比如說(shuō)

Math類中的方法

package com.jianjian;

?

import static java.lang.Math.*;

?

public class MathTest

{

?? public static void main(String[] args)

?? {

????? double a =pow(4,2);

????? System.out.println(a);

?????

?????

?? }

}

?

32.

包 packager的作用是將生成的類放入包中,

33.

在D:\myclass下面會(huì)生成一個(gè)Welcome.class的文件,接著:

?

開(kāi)始→運(yùn)行→CMD 確定(打開(kāi)DOS窗口)

把路徑換回D:\myclass

(操作如:C:\Documents and Settings\Administrator>E: 回車

E:\cd myclass 回車)

現(xiàn)在輸入:java Welcome 哈哈,看到什么了!!!

?

?

常用的更換路徑的命令: “cd” “cd..”

比如現(xiàn)在有這樣一條路徑:E:\文件夾A\文件夾B\文件夾C

若您現(xiàn)在的位置是C:\Documents and Settings\Administrator>

輸入E: 回車

路徑換為 E:\

輸入“cd 文件夾A”(不要加雙引號(hào))

路徑變?yōu)?E:\文件夾A

再輸入“cd 文件夾B”

路徑變?yōu)?E:\文件夾A\文件夾B (依此類推)

此時(shí)再輸入“cd..”看看,

又變回了 E:\文件夾A

?

所以:cd.. 是退回上級(jí)目錄

?

?

33.

(關(guān)于谷歌輸入法的頓號(hào)修改:屬性設(shè)置——>詞典——>編輯自定義短語(yǔ)——>添加——>“縮寫(xiě)”填“/”,自定義短語(yǔ)填“、”——>一路確定)

?

包作用域:

前面已經(jīng)接觸過(guò)訪問(wèn)修飾符:public 、 private.標(biāo)記為public的部分可以被任意的類使用,標(biāo)記為private的部分只能被定義它們的類使用。如果沒(méi)有指定public、private則可以被同一個(gè)包下的所有方法訪問(wèn)

?

?

?

34.

一般情況下,我們喜歡利用構(gòu)造方法為非共有類賦初值,被副處職的屬性叫做域,其實(shí)我們常常習(xí)慣將域定義為私有,在繼承中,當(dāng)子類想調(diào)用父類中的私有域時(shí),不能直接調(diào)用,只能通過(guò)公有的接口才能實(shí)現(xiàn),接口其實(shí)說(shuō)的就是父類中返回私有域的方法:

35.

在繼承中,子類可以使用父類中的所有域,而不用重新定義這些域,

例如private double salary;存在父類中的花子類就不需要重新定義,如果想加入新的域就要在子類中定義了。

?

?

36.很多的時(shí)候,繼承的使用頻率是很高的,因?yàn)槲覀兛偸菚?huì)遇到像這種情況:要處理的對(duì)象,大多數(shù)是統(tǒng)一的,但是有那么一兩個(gè)是特別的需要額外的改進(jìn)他們,如果數(shù)據(jù)是龐大的,繼承利用數(shù)組實(shí)現(xiàn)數(shù)據(jù)的輸出就更顯得重要!而且由于子類不能訪問(wèn)父類中的私有域,所以輸出時(shí)建議用方法返回私有域,最后的輸出也應(yīng)該通過(guò)方法返回。

看下面的程序。統(tǒng)計(jì)員工 staff 的工資,他分為employee和manager,其中manager的工資加上獎(jiǎng)金bouns。

/*

?* 繼承中還有很多我不知道的東西

?*/

package com.jianjian2;

?

public class StaffTest

{

?? public static void main(String[] args)

?? {

????? Boss boss = new Boss("laoban",5000.0,398.5);//第三個(gè)數(shù)據(jù)是獎(jiǎng)金;

????? Employee[] staff = new Employee[3];//定義三個(gè)數(shù)據(jù)的數(shù)組

????? staff[0] = boss;//向下類型轉(zhuǎn)換

????? staff[1] = new Employee("zhangSan",4534.3);

????? staff[2] = new Employee("liSi",3422.2);

????? for(Employee e : staff)

????? {

??????? System.out.println(e.getName());

??????? System.out.println(e.getSalary());

???????

????? }

?????

?? }

}

class Employee

{

?? private Stringname;

?? private double salary;

?? public Employee(String name,double salary)

?? {

????? this.name = name;

????? this.salary = salary;

?????

?? }

??

?? public String getName()

?? {

????? return name;

?? }

?? public double getSalary()

?? {

????? return salary;

?? }

}

class Boss extends Employee

{

?? public Boss(String name ,double salary,double bouns)

?? {

????? super(name,salary);//這里是個(gè)難點(diǎn),子類調(diào)用父類的構(gòu)造方法,其實(shí)就是要把子類的數(shù)據(jù)完善,即也讓子類具有父類的域;

????? this.bouns = bouns;

?????

?? }

?? private double bouns;

?? public double getSalary()

?? {

?????

????? return bouns + super.getSalary();

?? }

}

?

37.

不允許被繼承的類稱為final類

?

38.

Java里有很多難以理解并且容易忽略的約定,比如說(shuō)抽象類 abstract ;抽象類不能被實(shí)例化,含有抽象方法的類一定是抽象類,抽象類可以有具體的方法,那么什么是抽象方法,抽象方法又有什么意義呢?其實(shí)抽象類既然不能被實(shí)例化,就只能被子類所繼承了,抽象方法在父類中聲明,在子類中實(shí)現(xiàn),一個(gè)難以理解的約定:

如果子類只定義(實(shí)現(xiàn))了父類部分抽象方法,或沒(méi)有定義抽象方法,則子類也必須定義為抽象類,(為了防止子類被實(shí)例化),如果子類實(shí)現(xiàn)了父類中的全部抽象方法(可不是全部方法),子類就不是抽象的了;

?

39.

至于說(shuō)抽象方法的意義:我們只是在父類中聲明一下大概,但是我們并不知道接下來(lái)子類要怎么實(shí)現(xiàn)這個(gè)方法,比如說(shuō),我們?cè)谧宇愔卸x一個(gè)返回對(duì)員工評(píng)價(jià)的方法

Abstract public String evaluate();

然后在子類中重寫(xiě)這個(gè)方法,

public String evaluate()

{

}

有一點(diǎn)必須記住的是上面的約定,加入父類只有真么一個(gè)抽象方法,子類又實(shí)現(xiàn)了他,子類就不是抽象類了;

那么為什么定義抽象方法呢,如果在子類中直接定義評(píng)價(jià)方法不就行了嗎?為什么要什么聲明呢?

定義抽象方法有兩個(gè)好處:

1.?增加程序的結(jié)構(gòu)可讀性;

2.?很常見(jiàn)的,我們可能要同意調(diào)出子類父類中的某一屬性(域);

而我們都知道域大多數(shù)是私有的,或者統(tǒng)一調(diào)用某一方法,比如用

for(…..)

那么我們打印的時(shí)候肯定要用父類來(lái)打,如果父類不存在該方法,或者屬性,子類是無(wú)法打印出的,肯定出錯(cuò),所以抽象方法起著占位的作用。比如說(shuō)我們都在子類中定義了一個(gè)evaluate的方法,當(dāng)想把子類父類中的全部方法打印出來(lái)的時(shí)候,父類一定要有這個(gè)方法才能打印!

?

40.

/*

?* 編寫(xiě)一個(gè)程序?qū)崿F(xiàn):定義三個(gè)員工,分別包含姓名,工資,其中有一名是經(jīng)理,要求經(jīng)理的工資要加上獎(jiǎng)金;

?* 另外要實(shí)現(xiàn)經(jīng)理的一句評(píng)價(jià)

不要陷入一個(gè)誤區(qū),父類不能實(shí)例化,如果只像上面一道題中生成父類對(duì)象將數(shù)據(jù)帶入構(gòu)造方法中顯然是不行的,也就是說(shuō)我們也就只能通過(guò)子類一個(gè)一個(gè)來(lái)寫(xiě)了。這里只寫(xiě)Manager;

?*/

package com.jianjian5;

?

public class AbstractTest

{

?? public static void main(String[] args)

?? {

????? Employee[] staff = new Employee[3];

????? Manager boss = new Manager("wangwu", 3838.2, 334);

????? System.out.println(boss.getEvaluate());

????? System.out.println(boss.getName());

?????

?? }

}

abstract class Employee

{

?? private Stringname;

?? private double salary;

?? public Employee(String name,double salary)

?? {

????? this.name = name;

????? this.salary = salary;

?????

?? }

?? public double getSalary()

?? {

????? return salary;

?????

??????????

?? }

?? public String getName()

?? {

????? return name;

?? }

?? abstract public String getEvaluate();

??

}

class Managerextends Employee

{

?? private double bonus;

?? public Manager(String name ,double salary ,double bonus)

?? {

????? super(name,salary);

????? this.bonus = bonus;

?? }

?? public double getSalary()

?? {

????? return super.getSalary() + bonus;

?? }

?? public String getEvaluate()

?? {

????? return "He isreally a good boss";

?? }

??

}

?

?

41.

可以使用object類型的變量引用任何類型的對(duì)象;

想想會(huì)多有用,忽略類型;

?

42.

從Jdk5.0之后Java中的集合就采用泛型的方式執(zhí)行了,自5.0往集合中添加基本數(shù)據(jù)類型和輸出基本數(shù)據(jù)類型,都有自動(dòng)打包,和拆封的功能,也就是不需要進(jìn)行包裝類了:

比如 list.add(3);

?

43.

集合中運(yùn)用泛型之后,就確定了集合中要加入對(duì)象的類型;

比如說(shuō) List<String> list = new ArrayList<String>();

這樣的話就這能向list中添加字符串類型的數(shù)據(jù)了;

可是這樣做只能添加固定類型,而不能添加其他類型,圖什么呢,其實(shí)就是圖個(gè)方便,在輸出的時(shí)候我們不用再進(jìn)行強(qiáng)制類型轉(zhuǎn)換了,

以前再?zèng)]有使用泛型的時(shí)候都是默認(rèn)Object類型的.

通常我們一個(gè)集合也就存放相同的對(duì)象,所以這個(gè)缺點(diǎn)是可以容忍的。

?

?

44.幾乎所有集合都是有泛型要求的,所以對(duì)于遍歷集合泛型的類

Interator 也接受泛型 ,看下面的程序:

?

package com.jianjian;

?

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

?

public class GenericTest

{

?? public static void main(String[] args)

?? {

????? ArrayList <String> list = new ArrayList<String>();

????? String[] a = new String[3];

????? list.add("a");

????? list.add("b");

????? list.add("c");

????? list.toArray(a);//這里是轉(zhuǎn)換數(shù)組

????? System.out.println(Arrays.toString(a));

????? for(Iterator<String> ite =list.iterator();ite.hasNext();)

????? {

??????? String s = ite.next();

??????? System.out.println(s);

????? }

}

?? }

??

?

由于沒(méi)有了強(qiáng)制類型轉(zhuǎn)換,整個(gè)代碼顯得整潔多了。

剛接觸泛型,就多舉幾個(gè)例子,再?gòu)?fù)習(xí)一下知識(shí),當(dāng)想把自定義的類中的數(shù)據(jù)加到集合中時(shí),我們要判斷要加入的數(shù)據(jù)是不是已經(jīng)存在了,所以要調(diào)用 equals 和hashcode方法,注意要仔細(xì)研讀西面的程序,設(shè)置get 和 set 方法的原因就是提供一個(gè)公共的接口,要知道私有域只能通過(guò)共有方法來(lái)調(diào)取的:

package com.jianjian2;

?

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

?

public class GenericSetTest

{

?? public static void main(String[] args)

?? {

????? Set<Staff> set = new HashSet<Staff>();

????? set.add(new Staff("zhangsan", 23,"BeiJing"));

????? set.add(new Staff("lisi",21,"TianJing"));

????? set.add(new Staff("wangwu",24,"XiBanYa"));

????? for(Iterator<Staff> ite = set.iterator();ite.hasNext();)

????? {

??????? Staff staff = ite.next();

??????? String s1 = staff.getName();

??????? int s2 = staff.getAge();

??????? String s3 = staff.getAddress();

??????? System.out.println("name:" + s1 +", age:"+s2+", address: "+s3);

????? }

?????

?????

?? }

}

class Staff

{

?? private Stringname;

?? private int age;

?? private Stringaddress;

?? public Staff(String name,int age, String address)

?? {

????? this.name = name;

????? this.age = age;

????? this.address = address;

?????

?? }

?? public String getName()

?? {

????? return name;

?? }

?? public void setName(String name)

?? {

????? this.name = name;

?? }

?? public int getAge()

?? {

????? return age;

?? }

?? public void setAge(int age)

?? {

????? this.age = age;

?? }

?? @Override

?? public int hashCode()

?? {

????? final int prime = 31;

????? int result = 1;

????? result = prime * result + ((address ==null) ? 0 :address.hashCode());

????? result = prime * result + age;

????? result = prime * result + ((name ==null) ? 0 :name.hashCode());

????? return result;

?? }

?? @Override

?? public boolean equals(Object obj)

?? {

????? if (this == obj)

??????? return true;

????? if (obj ==null)

??????? return false;

????? if (getClass() != obj.getClass())

??????? return false;

????? Staff other = (Staff) obj;

????? if (address ==null)

????? {

??????? if (other.address !=null)

?????????? return false;

????? }

????? else if (!address.equals(other.address))

??????? return false;

????? if (age != other.age)

??????? return false;

????? if (name ==null)

????? {

??????? if (other.name !=null)

?????????? return false;

????? }

????? else if (!name.equals(other.name))

??????? return false;

????? return true;

?? }

?? public String getAddress()

?? {

????? return address;

?? }

?? public void setAddress(String address)

?? {

????? this.address = address;

?? }

??

}

?

?

總結(jié)

以上是生活随笔為你收集整理的Java学习笔记八的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。