重點(diǎn)掌握
1斩箫、類的定義
訪問權(quán)限控制符
? ? ? ? ? ? ? ? ? ? ? ? ?public? ? ? protected? ? ?default? ? ??private?
同一個(gè)類? ? ? ? ? ?可? ? ? ? ? ? ? ? ?可? ? ? ? ? ? ? ??可? ? ? ? ? ?可
同一個(gè)包? ? ? ? ? ? 可? ? ? ? ? ? ? ??可? ? ? ? ? ? ? ??可? ? ? ? ? ?
不同包但繼承? ? ?可? ? ? ? ? ? ? ??可
全局? ? ? ? ? ? ? ? ? ? 可
static 修飾符
如果一個(gè)類用static修飾斥铺,表示他是靜態(tài)的
static可以用來(lái)修飾類的成員方法荸型、類的成員變量,代碼塊
一赫段、實(shí)體類創(chuàng)建
第一種方式:無(wú)參構(gòu)造+get/set
package com.neuedu.test.chap06;
public class XiYouJi {
//姓名
private String name;
//戰(zhàn)斗力
private int sword;
//耐力
private int endurance;
//武器
private String arms;
? ? //年令
private int age;
public XiYouJi() {
super();
System.out.println("無(wú)參構(gòu)造方法被調(diào)用");
}
public String getMingzi() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSword() {
return sword;
}
public void setSword(int sword) {
this.sword = sword;
}
public int getEndurance() {
return endurance;
}
public void setEndurance(int endurance) {
this.endurance = endurance;
}
public String getArms() {
return arms;
}
public void setArms(String arms) {
this.arms = arms;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
注意:方法調(diào)用:
實(shí)例化對(duì)象
類名??對(duì)象名= new?? 類名();
public static void main(String[] args) {
//創(chuàng)建對(duì)象一般有兩種方式
//第一種 清水房+逐步采購(gòu)? 無(wú)參構(gòu)造+各個(gè)屬性的set方法? =》各個(gè)屬性的設(shè)置
//缺點(diǎn):逐步構(gòu)建 代碼不夠簡(jiǎn)潔
//優(yōu)點(diǎn):修改不會(huì)影響原有代碼
//適用于屬性經(jīng)常變動(dòng)的
XiYouJi swk = new XiYouJi();
swk.setName("孫悟空");
swk.setSword(5);
swk.setEndurance(5);
swk.setArms("金箍棒");
swk.setAge(18);
XiYouJi ts = new XiYouJi();
ts.setName("唐僧");
ts.setSword(0);
ts.setEndurance(5);
XiYouJi zbj = new XiYouJi();
zbj.setName("豬八戒");
zbj.setSword(2);
zbj.setEndurance(4);
swk.setArms("耙子");
}
}
構(gòu)造方法
用來(lái)創(chuàng)建對(duì)象
特點(diǎn):1)方法名與類名相同
2)沒有返回值 類型惹骂,并且沒有void占位
3)不需要return
分類:
分為無(wú)參構(gòu)造和有參構(gòu)造
如果我們實(shí)例化對(duì)象時(shí)如下寫:
類名? 對(duì)象名=new 類名();? 實(shí)際調(diào)用的是無(wú)參構(gòu)造方法
如果你不寫無(wú)參構(gòu)造 徙邻,系統(tǒng)會(huì)為你自動(dòng)生成一個(gè)。如果你寫了契讲,就會(huì)調(diào)用你新寫的這個(gè)仿吞。
構(gòu)造方法的重載
有參構(gòu)造可以限制參數(shù)個(gè)數(shù),通過(guò)重載實(shí)現(xiàn)
有參構(gòu)造無(wú)參構(gòu)造屬于方法重載
學(xué)生試驗(yàn):
把類的無(wú)參方法注釋掉捡偏,看發(fā)生什么現(xiàn)象
發(fā)現(xiàn)調(diào)用無(wú)參構(gòu)造方法的地方報(bào)錯(cuò)唤冈。
結(jié)論:
如果你在類中寫了有參構(gòu)造,那么系統(tǒng)不會(huì)再幫你生成無(wú)參構(gòu)造了银伟,你如果還想用無(wú)參構(gòu)造 你虹,就需要重載一下無(wú)參構(gòu)造方法绘搞。
無(wú)參構(gòu)造:
創(chuàng)建方式:右鍵-source-generate constructor from superclass
public XiYouJi() {
super();
System.out.println("無(wú)參構(gòu)造方法被調(diào)用");
}
XiYouJi swk = new XiYouJi();
debug測(cè)試一下
學(xué)生練習(xí):無(wú)參方法創(chuàng)建對(duì)象和對(duì)象賦值
有參構(gòu)造:
創(chuàng)建方式:右鍵-source-generate constructor using fields
系統(tǒng)生成代碼如下:
//有參構(gòu)造-經(jīng)常用來(lái)一次性初始化參數(shù)
public XiYouJi(String name, int sword, int endurance, String arms, int age) {
super();
this.name = name;
this.sword = sword;
this.endurance = endurance;
this.arms = arms;
this.age = age;
}
調(diào)用方式:
@Test
public? void test2() {
//精裝房 拎包入住 有參構(gòu)造 -創(chuàng)建同時(shí)把各個(gè)屬性初始化
//有參構(gòu)造如何編寫
//優(yōu)點(diǎn):一次性構(gòu)建,方便傅物,代碼簡(jiǎn)潔
//缺點(diǎn):修改麻煩
//適用于屬性不經(jīng)常變動(dòng)的情況
XiYouJi swk2 = new XiYouJi("孫悟空", 5, 5, "金箍棒",18);
System.out.println(swk2.sword);
}
學(xué)生練習(xí):
練習(xí)有參方法創(chuàng)建對(duì)象和為對(duì)象賦值
注意:
一旦編寫了有參構(gòu)造夯辖,系統(tǒng)不會(huì)再為我們生成無(wú)參構(gòu)造,如果想用無(wú)參構(gòu)造挟伙,需要顯式編寫
其他方法的創(chuàng)建:
除了構(gòu)造方法外楼雹,很多時(shí)候我們還需要編寫自己的業(yè)務(wù)方法。這些方法用于做業(yè)務(wù)尖阔。
課堂簡(jiǎn)單演示:
1)編寫一個(gè)商品的類贮缅,要求包含商品名稱和商品價(jià)格,并且編寫一個(gè)方法能夠在控制臺(tái)輸出“商品名:價(jià)格”介却。并在主函數(shù)中調(diào)用
輸出示例:
可樂:2.5
鼠標(biāo):50
package com.neuedu.test.chap06;
/**
* 1)編寫一個(gè)商品的類谴供,
* 要求包含商品名稱和商品價(jià)格,
* 并且編寫一個(gè)方法能夠在控制臺(tái)輸出“商品名:價(jià)格”齿坷。
* 并在主函數(shù)中調(diào)用
* @author Administrator
*
*/
public class Product {
//商品名稱
private String proName;
//商品價(jià)格
private double proPrice;
//編寫一個(gè)方法能夠在控制臺(tái)輸出“商品名:價(jià)格”桂肌。
public? void printDetail(){
System.out.println(this.proName+":"+this.proPrice);
}
public Product(String proName, double proPrice) {
super();
this.proName = proName;
this.proPrice = proPrice;
}
//并在主函數(shù)中調(diào)用
/*輸出示例:
可樂:2.5
鼠標(biāo):50*/
public String getProName() {
return proName;
}
public double getProPrice() {
return proPrice;
}
public static void main(String[] args) {
//實(shí)例化一個(gè)可樂商品
Product keli=new Product("可樂",2.5);
//調(diào)用可樂的方法打印可樂的詳情
keli.printDetail();
Product mouse=new Product("鼠標(biāo)",50);
mouse.printDetail();
}
}
上面都演示的無(wú)返回值類型的方法,下面學(xué)習(xí)有返回值類型的方法
課堂練習(xí)永淌,作業(yè)題2
定義一個(gè)矩形類Rectangle:
2.1? 有2個(gè)屬性:長(zhǎng)length崎场、寬width
2.2? 通過(guò)構(gòu)造方法Rectangle(int width, int length),分別給兩個(gè)屬性賦值
2.3? 定義三個(gè)方法:getArea()求面積遂蛀、getPer()求周長(zhǎng)谭跨,showAll()分別在控制臺(tái)輸出長(zhǎng)、寬李滴、面積螃宙、周長(zhǎng)。
2.4? 創(chuàng)建一個(gè)Rectangle對(duì)象所坯,并輸出相關(guān)信息
public class Rectangle {
//長(zhǎng)
private double length;
//寬
private double width;
public Rectangle(double length, double width) {
super();
this.length = length;
this.width = width;
}
/**
* getArea()求面積
*/
public double getArea(){
double area=length*width;
return area;
}
? /**
? ? * getPer()求周長(zhǎng)
? ? */
public double getPer(){
double girth=(this.length+this.width)*2;
return girth;
}
/**
* showAll()分別在控制臺(tái)輸出長(zhǎng)谆扎、寬、面積芹助、周長(zhǎng)堂湖。
*/
public void showAll(){
System.out.println("長(zhǎng)"+length);
System.out.println("寬"+width);
double result=getArea();
System.out.println("面積"+result);
double result2=getPer();
System.out.println("周長(zhǎng)"+result2);
}
public static void main(String[] args) {
Rectangle rc=new Rectangle(13.4,5);
rc.showAll();
}
}
java 面向?qū)ο笕筇卣鳎?br>
封裝? 繼承 多態(tài)
封裝
所謂封裝是把對(duì)象的屬性和行為結(jié)合在一個(gè)獨(dú)立的系統(tǒng)單位內(nèi)部
盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),只向外部提供接口
繼承(inheritance):
也稱泛化状土,繼承性是子類自動(dòng)共享父類屬性和方法的機(jī)制无蜂,在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行声诸,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入自己若干新的內(nèi)容
多態(tài)(polymorphism):
指同一個(gè)命名可具有不同的語(yǔ)義
OO方法中退盯,常指在一般類中定義的屬性或方法被特殊類繼承之后彼乌,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為泻肯,對(duì)于子類,可用不同的方法替代實(shí)現(xiàn)父類的服務(wù)的方法
static關(guān)鍵字
可以修飾的元素
屬性
注意:只能修飾屬性慰照,不能修飾局部變量灶挟。
方法
代碼塊
static修飾屬性:
所有對(duì)象共享,稱為靜態(tài)變量或類變量
不用static修飾的屬性稱為實(shí)例變量
static修飾方法:
不需要實(shí)例化毒租,可以直接訪問稚铣,稱為靜態(tài)方法或類方法
static修飾語(yǔ)句塊:
類中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊墅垮,稱為靜態(tài)代碼塊
*static修飾的屬性惕医、方法和代碼塊的特點(diǎn)
****用static修飾的屬性
它們?cè)陬惐惠d入時(shí)創(chuàng)建,只要類存在算色,static變量就存在抬伺。
靜態(tài)變量和非靜態(tài)變量的區(qū)別是:靜態(tài)變量被所有的對(duì)象所共享,在內(nèi)存中只有一個(gè)副本灾梦,它當(dāng)且僅當(dāng)在類初次加載時(shí)會(huì)被初始化峡钓。而非靜態(tài)變量是對(duì)象所擁有的,在創(chuàng)建對(duì)象的時(shí)候被初始化若河,存在多個(gè)副本能岩,各個(gè)對(duì)象擁有的副本互不影響。
直接訪問:類名.屬性
靜態(tài)方法
靜態(tài)方法不需要實(shí)例化萧福,可以直接訪問拉鹃,訪問方式:
直接訪問:類名.方法名()
實(shí)例化后訪問:對(duì)象名.方法名() (不建議使用)
靜態(tài)語(yǔ)句塊
一個(gè)類中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊
當(dāng)類被載入時(shí)统锤,靜態(tài)代碼塊被執(zhí)行毛俏,且只被執(zhí)行一次
靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類屬性的初始化
用static修飾的方法和不用static修飾的方法調(diào)用上的區(qū)別:
package com.neuedu.test.chap06;
import java.util.UUID;
public class StaticDemo {
//網(wǎng)站訪問計(jì)數(shù)器
//如果要把他變成共享計(jì)數(shù)器 他的值會(huì)動(dòng)態(tài)變化
public static int count;
// 用static修飾的方法是靜態(tài)方法
public static String uudiUtil() {
// uuid生成器
return UUID.randomUUID().toString();
}
public StaticDemo() {
super();
System.out.println("構(gòu)造方法被調(diào)用");
}
//在類實(shí)例化時(shí)就調(diào)用
//會(huì)在所有方法(包括構(gòu)造方法)執(zhí)行前被調(diào)用
//他適合做一些基本初始化(準(zhǔn)備)工作
static{
System.out.println("我先被調(diào)用!");
}
public void print(){
System.out.println("print");
}
}
不用static修飾的方法調(diào)用是用:
第一步:把類實(shí)例化成對(duì)象
第二步:調(diào)用對(duì)象的方法
作業(yè):
本章課后作業(yè)
選做題1
1)設(shè)計(jì)一個(gè)類Student,該類包括姓名饲窿、學(xué)號(hào)和成績(jī)煌寇。
2)設(shè)計(jì)一個(gè)方法,按照成績(jī)從高到低的順序輸出姓名逾雄、學(xué)號(hào)和成績(jī)信息阀溶。
public class Student {
/*
* 1)設(shè)計(jì)一個(gè)類Student,該類包括姓名鸦泳、學(xué)號(hào)和成績(jī)银锻。
* 2)設(shè)計(jì)一個(gè)方法,按照成績(jī)從高到低的順序輸出姓名做鹰、學(xué)號(hào)和成績(jī)信息击纬。
*/
private String name;
private int id;
private int score;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int id, int score) {
super();
this.name = name;
this.id = id;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
//把成績(jī)亂序的數(shù)組轉(zhuǎn)化成按成績(jī)排序的數(shù)組
public void sortByScore(Student[] studs){
for(int i=1;i<studs.length;i++){
? for(int j=0;j<studs.length-i;j++){
? if(studs[j].getScore()<studs[j+1].getScore()){
? Student temp=studs[j];
? studs[j]=studs[j+1];
? studs[j+1]=temp;
? }
? }
}
}
public static void main(String[] args) {
Student s1=new Student("顧俊寧",100,84);
Student s2=new Student("李洋",101,94);
Student s3=new Student("王琦舒",102,66);
Student s4=new Student("高榮斌",104,82);
Student s5=new Student("劉元昊",105,98);
//System.out.println("s1---->"+s1);
//把上面四個(gè)學(xué)生放數(shù)組里
Student[] students=new Student[]{s1,s2,s3,s4,s5};
Student s=new Student();
s.sortByScore(students);
for(Student stu:students){
System.out.println(stu.getName());
System.out.println(stu.getScore());
System.out.println("----------->");
}
}
}
選做題
2、定義一個(gè)汽車類Vehicle钾麸,要求如下:[選做題]
2.1屬性包括:汽車品牌brand(String類型)更振、顏色color(String類型)和速度speed(double類型)炕桨,并且所有屬性為私有。
2.2至少提供一個(gè)有參的構(gòu)造方法(要求品牌和顏色可以初始化為任意值肯腕,但速度的初始值必須為0)献宫。
2.3為私有屬性提供訪問器方法。注意:汽車品牌一旦初始化之后不能修改实撒。
2.4定義一個(gè)一般方法run()姊途,用打印語(yǔ)句描述汽車奔跑的功能
2.5定義測(cè)試類VehicleTest,在其main方法中創(chuàng)建一個(gè)品牌為“benz”知态、顏色為“black”的汽車捷兰。
package com.neuedu.chap06.homework;
public class Vehicle {
private String brand;
private String color;
private double speed=0;
public Vehicle(String brand, String color) {
super();
this.brand = brand;
this.color = color;
this.speed = 0;
}
public String getBrand() {
return brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
this.speed = speed;
}
public static void main(String[] args) {
Vehicle y=new Vehicle("benz","black");
y.run();
}
public void run(){
System.out.println("顏色為:"+color+brand+"以"+speed+"的速度奔跑");
}
}