原文地址:http://blog.csdn.net/liurongsheng123/article/details/79017157
JAVA面向對象
構造方法
特色
無返回值
方法名與類名相同
形式:public 方法名(){
}1234567
注意事項
1.若是你沒寫無參的構造方法
系統會給你提供一個無參的構造方法
2.若是我只寫了有參的構造方法
這時系統就不會給你提供無參的構造方法
3.寫類的時候 建議 無參有參構造方法全寫12345
定義類書寫順序
成員變量 -> 無參有參構造方法 -> set/get方法 ->成員方法1
代碼示例1
public class Demo01{
}
class Car(){
String name; int num; /*
*構造方法重載:只跟參數有關
*當類中的成員變量須要計算的時候 能夠在構造方法裏完成
*/
//無參構造方法
public car(){
System.out.println("我是無參構造方法");
} public car(String name, int num){ //初始化成員變量
this.name = name; this.num = num;
System.out.println("我是有參構造方法");
} public Car(String name){ this.name = name;
} public void sayHi(){
System.out.println(name + "*****" + num);
} public void fun(){
System.out.println("哈哈");
}
}123456789101112131415161718192021222324252627282930313233
代碼示例2
需求:
建立一個矩形類 屬性 長 寬
計算 周長 和 面積(都用整數就行)
要求
有參無參構造方法 set/get方法12345
public class Demo02{ private int side; //定義長
private int wide; //定義寬
private int length; //定義周長
private int area; //定義面積
public Demo02(){
} public Demo02(int side, int wide){ this.side = side; this.wide = wide; this.length = (side + wide) * 2; this.area = side * wide;
} //建議不要修改set get方法的寫法
public int getSide(){ return side;
} public void setSide(int side){ this.side = side;
} public int getWide(){ return wide;
} public void setWide(int wide){ this.wide = wide;
} public int getLength(){ return length;
} public void setLength(int length){ this.length = length;
} public int getArea(){ return area;
} public void setArea(int area){ this.area = area;
}
}1234567891011121314151617181920212223242526272829303132333435363738394041424344
靜態變量 靜態方法
靜態變量 和 靜態方法(使用static修飾)
靜態變量保存在方法的靜態區(共享區)
靜態變量是共享的空間123
靜態變量如何調用
1.可使用對象來調用
2.推薦使用類名來調用12
爲何靜態變量要用類名取調用
先有雞仍是先有的蛋
先有類仍是先有對象
只要加載了.class文件 就加載了靜態變量(這時尚未對象參數)
靜態變量隨着類的產生而產生12345
靜態變量(屬於類 也叫作類變量)和非靜態變量(屬於對象 對象變量)的區別
1.調用方式不一樣
靜態變量:對象 或者 類名去調用(推薦 類名)
非靜態變量:只能使用對象去調用
2.內存中存在的位置不一樣
靜態變量:方法的靜態區
非靜態成員變量:堆區
3.加載的時機不一樣
靜態變量:隨着類的加載而加載(不依賴對象而建立)
非靜態成員變量:隨着對象的建立而建立(依賴對象)
4.聲明週期不一樣
靜態變量:隨着類的銷燬而銷燬(至關於程序結束)
非靜態成員變量:隨着對象的銷燬而銷燬123456789101112
何時設置static靜態變量
當你在設計類的時候,須要考慮成員變量是否須要共享,static 修飾的方法或者變量 是被全部對象所共享的同一塊內存空間12
代碼示例
public class Demo03{ public static void main(String[] args){
AVGirl girl1 = new AVGirl();
girl1.name = "蒼老師";
AVGirl.country = "日本";
girl.sayHi();
AVGirl girl2 = new AVGirl();
girl2.name = "波多老師";
AVGirl.country = "北海道";
girl2.sayHi();
}
}
class AVGirl{
String name; //姓名
static String country; //國籍
public void sayHi(){
System.out.println("姓名爲:" + name);
System.out.println("國籍爲:" + country);
}
}12345678910111213141516171819202122
靜態變量在內存中得加載步驟
1.加載.class文件(字節碼文件)到方法區2.main方法入棧3.遇見AVGirl對象 先要加載AVGirl.class AVGirl中分爲靜態區和非靜態區 這時初始化
靜態變量country的初值爲null4.建立對象(堆區開闢空間)5.把對象地址賦值給girl1變量 保存6.經過類名 修改類變量的值7.sayHi方法入棧 打印8.sayHi出棧9.main出棧!1234567891011
內存變量圖形示例


靜態方法與非靜態方法
靜態方法(使用static 修飾的方法)1.只能使用靜態變量2.只能使用靜態方法
舉例:Math.random();Array.toString();
非靜態方法:1.可使用靜態變量和非靜態變量2.可使用靜態方法和非靜態方法12345678910
代碼舉例
public class Demo04{ public static void main(String[] args){
Man man = new Man();
man.fun();
}
}
class Man{ int num1 = 10; static int num2 = 5; //非靜態方法 能夠訪問 靜態變量和非靜態變量
//靜態方法 能夠訪問啥?(加上靜態 至關於 隨着類改變跟對象不要緊)
public void fun(){
System.out.println(num1);
System.out.println(num2); //調用靜態方法(類方法) 推薦使用 類名調方法
Man.sayHi();
} public static void sayHi(){
System.out.println("我是sayHi");
} //靜態方法
//靜態變量和靜態方法中 不能訪問 非靜態變量(應爲加載類的時候尚未對象)
//簡單記:靜態只能使用靜態的
public static void fun1(){ //System.out.println(num1); 靜態方法沒法調用非靜態變量
System.out.println(num2);
}
}1234567891011121314151617181920212223242526272829
main解析
1.main方法就是爲了讓jvm去調用的方法public: jvm調用這個方法 要使用最大權限static: jvm調用時是不須要建立對象 直接使用類名調就行(類名.main())main: 不是關鍵字 jvm只認識main這個詞String[] args 接收從鍵盤輸入的值(基本不用這個方法了)12345
課堂習題
五分鐘內寫出
1.遍歷數組
2.在數組中打印最大值
3.反轉數組
4.冒泡排序
這些在這篇知識前都應該會寫123456
public void fun(int[] array){ for(int i = 0; i < array.length; i ++){
System.out.println(array[i]);
}
}public void fun1(int[] array){ int temp = 0; for(int i = 0;i < array.length; i++){ if(temp < array[i]){
temp = array[i];
}
}
System.out.println("最大值:" + temp);
}public void fun2(int[] array){ for(int i = 0; i < array.length/2; i++){ int temp = array[i]; array[i] = array[array.length - 1 -i]; array[array.length - i - 1] = temp;
}
}public void fun3(int[] array){ for(int i = 1; i < array.length; i++){ for(int j = 0; j < arrith.length - i; j++){ if(array[j] > array[j+1]){ int temp = array[j]; array[j] = array[j + 1]; array[j+1] = temp;
}
}
}
}1234567891011121314151617181920212223242526272829303132333435
何時使用靜態方法?
靜態方法 只能使用靜態的變量和方法
當我要寫的這個方法中 沒有使用到 非靜態方法和變量 可使用靜態方法12
當我這個類 全部方法都是靜態方法
這時 這個類在使用的時候 就徹底不須要對象
能夠把構造方法私有化(外界就再也建立不了對象了,能夠告訴使用者
使用這個類不須要建立對象) 若是寫了文檔註釋 可使用編譯指令
生成文檔
編譯文檔指令:
javadoc -d(指定生成文檔所在的文件夾) -author -version 文件名.java1234567
做業 建立10個對象類 並寫明get/set方法
1.bear類
private static String name; private static String color; private static double weight; private static double high; public void climbTree(){
System.out.println("熊會爬樹");
} public void swim(){
System.out.println("熊會游泳");
} public void catchFish(){
System.out.println("熊會抓魚");
} public void eatHoney(){
System.out.println("熊喜歡吃蜂蜜");
} public void sayHi(){
System.out.println("姓名: " + name);
System.out.println("毛色:" + color);
System.out.println("體重:" + weight);
System.out.println("身高:" + high);
} public String getName(){ return name;
} public void setName(String name){ this.name = name;
} public String getColor(){ return color;
} public void setColor(String color){ this.color = color;
} public double getWeight(){ return weight;
} public void setWeight(double weight){ this.weight = weight;
} public double getHigh(){ return high;
} public void setGigh(double high){ this.high = high;
}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
2.長方體類
private static double side; private static double wide; private static double high; public static void sayHi() {
System.out.println("長方體的長爲:" + side);
System.out.println("長方體的寬爲:" + wide);
System.out.println("長方體的高位:" + high);
} public static void perimeter() {
System.out.println("長方體的周長爲:" + (4 * side + 4 * wide + 4 * high));
} public static void area() {
System.out.println("長方體的面積爲:" + (side * wide * 2 + side * high * 2 + wide * high * 2 ));
}
public static void volume() {
System.out.println("長方體的體積爲:" + (side * wide * high));
} public double getSide() { return side;
} public void setSide(double side) { this.side = this.side;
} public double getWide() { return wide;
} public void setWide(double wide) { this.wide = wide;
} public double getHigh() { return high;
} public void setHigh(double high) { this.high = high;
}123456789101112131415161718192021222324252627282930313233343536373839
3.青蛙類
private static String name; private static String color; private static String swim; private static String type; public static void swim(){
System.out.println("青蛙會游泳");
} public static void catchInsets() {
System.out.println("青蛙會抓害蟲");
} public static void cry() {
System.out.println("青蛙呱呱叫");
} public static void sayHi() {
System.out.println("姓名:" + name );
System.out.println("膚色:" + color);
System.out.println("泳技:" + swim);
System.out.println("類型:" + type);
} public String getName() { return name;
} public void setName(String name) { this.name = name;
} public String getColor() { return color;
} public void setColor() { this.color = color;
} public String getSwim(){ return color;
} public void setSwim() { this.swim = swim;
} public String getType() { return type;
} public void setType() { this.type = type;
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
4.樹葉類
private static String name; private static String type; private static String color; private static double wide; public void fun1() {
System.out.println("樹葉能夠進行光合做用");
} public void fun2() {
System.out.println("樹葉能夠進行氧化做用");
} public void fun3() {
System.out.println("樹葉能夠成長");
} public void sayHi() {
System.out.println("姓名:" + name);
System.out.println("類型:" + type);
System.out.println("顏色:" + color);
System.out.println("葉寬:" + wide);
} public String getName() { return name;
} public void setName(String name) { this.name = name;
} public String getType() { return type;
} public void setType(String type) { this.type = type;
} public String getColor() { return color;
} public void setColor(String color) { this.color = color;
} public double getWide() { return wide;
} public void setWide(double wide) { this.wide = wide;
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
5.×××類
private static double length; //彈長
private static double springDiameter; //彈經
private static double weight;//起飛重量
public static void launch() {
System.out.println("×××能夠發射");
} public static void fly() {
System.out.println("×××能夠飛行");
} public static void bomb() {
System.out.println("×××能夠爆炸");
} public static void sayHi() {
System.out.println("彈長爲:" + length);
System.out.println("彈徑爲:" + springDiameter);
System.out.println("重量爲:" + weight);
} public double getLength() { return length;
} public void setLength(double length) { this.length = length;
} public double getSpringDiameter() { return springDiameter;
} public void setSpringDiameter(double springDiameter) { this.springDiameter = springDiameter;
} public double getWeight() { return weight;
} public void setWeight(double weight) { this.weight = weight;
}123456789101112131415161718192021222324252627282930313233343536373839
6.猴子類
private static String name; private static String color; private static String sex; private static String type; public static void sayHi() {
System.out.println("姓名:" + name);
System.out.println("顏色:" + color);
System.out.println("性別:" + sex);
System.out.println("類型:" + type);
} public static void climb() {
System.out.println("猴子 會 爬樹");
} public static void eat() {
System.out.println("猴子 會 吃飯");
} public static void sleep() {
System.out.println("猴子 會 睡覺");
} public String getName() { return name;
} public void setName(String name) { this.name = name;
} public String getColor() { return color;
} public void setColor() { this.color = color;
} public String getSex() { return sex;
} public void setSex(String sex) { this.sex = sex;
} public String getType() { return type;
} public void setType() { this.type = type;
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
7.飛機類
private static double weight; //起飛重量
private static double speed; //飛行速度
private static int power; //功率
private static double ammunition;//彈藥
public void fly(){
System.out.println("飛機能夠快速飛行");
} public void manned(){
System.out.println("飛機能夠載人");
} public void bomb(){
System.out.println("飛機能夠投彈");
} public void sayHi(){
System.out.println("起飛重量爲:" + weight);
System.out.println("飛行速度爲:" + speed);
System.out.println("發動功率爲:" + power);
System.out.println("掛彈數量爲:" + ammunition);
} public double getWeight(){ return weight;
} public void setWeight(double weight){ this.weight = weight;
} public double getSpeed(){ return speed;
} public void setSpeed(double speed){ this.speed = speed;
} public int getPower(){ return power;
} public void setPower(int power){ this.power = power;
} public double getAmmunition(){ return ammunition;
} public void setAmmunition(double ammunition){ this.ammunition = ammunition;
}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
8.坦克類
private static String model; //型號
private static double range; //射程
private static double weight; //重量
private static double speed; //速度
public void run(){
System.out.println("坦克能夠跑");
} public void artillery(){
System.out.println("坦克能夠發射炮彈");
} public void turn(){
System.out.println("坦克能夠轉彎");
} public void sayHi(){
System.out.println("型號爲:" + model);
System.out.println("射程爲:" + range);
System.out.println("重量爲:" + weight);
System.out.println("速度爲:" + speed);
} public String getModel(){ return model;
} public void setModel(String model){ this.model = model;
} public double getRange(){ return range;
} public void setRange(double range){ this.range = range;
} public double getWeight(){ return weight;
} public void setWeught(double weight){ this.weight = weight;
} public double getSpeed(){ return speed;
} public void setSpeed(double speed){ this.speed = speed;
}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
9.大象類
private static String name; private static double high; private static double weight; private static String color; public void sleep() {
System.out.println("老虎會睡覺");
} public void eat() {
System.out.println("老虎會捕食");
} public void breath() {
System.out.println("老虎會呼吸");
} public void sayHi() {
System.out.println("姓名:" + name);
System.out.println("身高:" + high);
System.out.println("體重:" + weight);
System.out.println("顏色:" + color);
} public String getName() { return name;
} public void setName(String name) { this.name = name;
} public double getHigh() { return high;
} public void setHigh(double high) { this.high = high;
} public double getWeight() { return weight;
} public void setWeight(double weight) { this.weight = weight;
} public String getColor() { return color;
} public void setColor(String color) { this.color = color;
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
10.鯨魚類
private static double weight; private static double high; private static String type; private static int age; public void swim() {
System.out.println("鯨魚 會 游泳");
} public void waterSpray() {
System.out.println("鯨魚 會 噴水");
} public void eat() {
System.out.println("鯨魚會捕食");
} public double getWeight() { return weight;
} public void setWeight(int weight) { this.weight = weight;
} public double getHigh() { return high;
} public void setHigh(double high) { this.high = high;
} public String getType() { return type;
} public void setType() { this.type = type;
} public int getAge() { return age;
} public void setAge(int age) { this.age = age;
}