類,物件,成員變數和區域性變數,匿名物件
類是一組相關的屬性和行為的集合
屬性- 成員變數
行為- 成員方法
成員變數,可以有很多個 零值
成員方法,也可以有很多個,到底具體寫幾個,看具體的需要
自定義型別的 物件建立 的格式
// 自定義的型別 物件名 = new 自定義型別();
Person person = new Person();
如何使用物件,使用物件其實是使用物件中的成員(成員變數,成員方法)
格式:物件名.成員變數 或者 物件名.成員方法()
取值. 讀操作
// 呼叫成員方法
// 物件名.成員方法();
person.eat();
類與物件的建立記憶體佈局圖
一個物件:
一個物件的基本初始化過程
兩個物件:
方法的共用
三個物件:
其中有兩個引用指向同一個物件
package com.newedu.jb.day06;
/**
* 定義一個學生類
* @author 小可愛
*
*/
public class Student {
//成員變數
String name; //預設值 null
int age;//預設值 0
String school; //預設值 null
//成員方法
public void eat(){
System.out.println("eat()方法被呼叫了");
}
public void sleep(){
System.out.println("sleep()方法被呼叫了");
}
public void study(){
System.out.println("Student()方法被呼叫了");
}
public void showInfo(){
System.out.println("name:"+name+" age:"+age+" school:"+school);
}
}
package com.newedu.jb.day06;
/**
* 自定義類Student的測試類
* @author 小可愛
*
*/
public class StudentDemo {
public static void main(String[] args) {
// int i ;
// System.out.println(i);
//建立一個物件
Student student = new Student();
student.showInfo();
//呼叫物件的成員變數 讀值
System.out.println(student.name);
System.out.println(student.age);
System.out.println(student.school);
//給物件的成員變數賦值 寫值
student.name = "尚文旭";
student.age = 20;
student.school = "中原工學院";
//呼叫物件的成員變數 讀值
System.out.println(student.name);
System.out.println(student.age);
System.out.println(student.school);
//如何呼叫成員方法呢?
student.eat();
student.sleep();
student.study();
student.showInfo();
System.out.println("===================");
//建立第二個學生物件
Student student2 = new Student();
//呼叫物件的成員變數 ,讀值
System.out.println(student2.name); //輸出null
System.out.println(student2.age); // 0
System.out.println(student2.school); // 輸出null
//給物件的成員變數賦值 寫值
student2.name = "泡泡";
student2.age = 18;
student2.school = "軟體學院";
//呼叫物件的成員變數 ,讀值
System.out.println(student2.name); //輸出新值"泡泡"
System.out.println(student2.age);//輸出新值 18
System.out.println(student2.school); //輸出新值"軟體學院"
//呼叫物件的成員方法
student2.eat();
student2.sleep();
student2.study();
student2.showInfo();
System.out.println("======================");
// int[] array1 = new int[3];
// int[] array2 = array1;
//Student student = new Student();
// Student型別 物件名 =
Student student3 = student;
System.out.println(student3.name);//輸出 “尚文旭”
System.out.println(student3.age);//輸出 20
System.out.println(student3.school); //輸出 “中原工學院"
//給成員變數賦值
student3.name = "peter";
student3.age = 21;
student3.showInfo();
student.showInfo();
}
}
成員變數和區域性變數的區別
在類中的位置不同
成員變數 類中方法外
區域性變數 方法內或者方法宣告上
在記憶體中的位置不同
成員變數 堆記憶體
區域性變數 棧記憶體
生命週期不同
成員變數 隨著物件的存在而存在,隨著物件的消失而消失
區域性變數 隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失
初始化值不同
成員變數 有預設的初始化值
區域性變數 沒有預設的初始化值,必須先定義,賦值,才能使用。
基本型別作為形式引數
引用型別作為形式引數(自定義類作為引數)
基本資料型別和引用資料型別作為方法的引數傳遞後,
在方法內對引數進行修改,是否會對引數產生影響的問題?
基本資料型別作為方法的形式引數時,做的是“值傳遞”
引用資料型別作為方法的形式引數時,做的也是“值傳遞”,但是這次傳遞的記憶體地址值
(兩個變數引用了同一塊記憶體地址值。)
package com.newedu.jb.day06;
/**
* 演示形式引數的問題:
* 自定義型別做為形式引數的問題
* @author 小可愛
*
*/
public class ParameterMethod {
public void change(int a ,int b){
// 這裡的a和b 是重新定義的區域性變數(是因為在方法內定義的) a = 10,b = 20;
a *=2; // 20;
b +=a; // 40
// 一旦離開了 方法體,這裡面的區域性變數a和b就消失了
}
/**
* 自定義型別Student作為形式引數傳遞
* 引用型別作為形式引數傳遞
* @param stu
*/
// public void change2{
// Student stu ;
// stu = new Student();
// Student stu2 = new Student();
// stu = stu2;
//}
public void change2(Student stu){
// 相當於 在這裡定義了一個Student物件 stu; Student stu = ?
//給我們的成員變數 age加上100
stu.age += 100;
//呼叫 成員方法()
stu.showInfo();
}
}
package com.newedu.jb.day06;
/**
* 測試類,演示自定義型別作為形式引數的問題
* @author 小可愛
*
*/
public class ParameterMethodDemo {
public static void main(String[] args) {
//建立一個物件
ParameterMethod pm = new ParameterMethod();
int a = 10;
int b = 20;
System.out.println("a:"+a+"b:"+b); //a:10 b:20
//呼叫物件的成員方法
pm.change(a, b);
System.out.println("a:"+a+"b:"+b); // a:10 b:20
// a:20 b:40
System.out.println("=================");
Student stu = new Student();
stu.showInfo(); // name:null age:0 school:null
pm.change2(stu);
stu.showInfo(); // name:null age:100 school:null
}
}
匿名物件:
匿名物件:就是沒有名字的物件。
是物件的一種簡化表示形式
匿名物件的兩種使用情況
物件呼叫成員僅僅一次的時候
作為實際引數傳遞
程式碼舉例:
package com.newedu.jb.day06;
/**
* 匿名物件的建立與使用
* @author 小可愛
*
*/
public class AnonymityObjectDemo {
public static void main(String[] args) {
// 匿名物件,就是沒有名字的物件
// Student stu = new Student();
(new Student()).name = "尚文旭";
new Student().age = 20;
new Student().showInfo();
// 匿名物件有短板: 只能用一次。
// 匿名物件的用途:
// A:物件呼叫成員僅僅一次的時候
// B:作為實際引數傳遞
ParameterMethod pm = new ParameterMethod();
// Student stu = new Student();
pm.change2(new Student());
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2799179/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 成員變數和區域性變數變數
- Python中類變數、成員變數、區域性變數的區別Python變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- java學習筆記day07 成員變數與區域性變數、形式引數、匿名物件、封裝、private、this、構造方法、類詳細講解、staticJava筆記變數物件封裝構造方法
- 區域性變數和全域性變數變數
- java 全域性變數和區域性變數Java變數
- jmeter全域性變數和區域性變數JMeter變數
- Java之區域性匿名內部類物件Java物件
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- Python中的全域性變數和區域性變數Python變數
- 全域性變數與區域性變數變數
- js-js的全域性變數和區域性變數JS變數
- 類的靜態成員變數和普通成員變數該怎樣去區別定義變數
- Java區域性變數與全域性變數Java變數
- 【c】全域性變數與區域性變數變數
- 變數物件與作用域鏈變數物件
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- javascript 變數物件JavaScript變數物件
- 物件屬性值賦給變數物件變數
- 子父類中成員變數變數
- 成員變數變數
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- 【Java貓說】例項變數與區域性變數Java變數
- JavaScript之變數物件JavaScript變數物件
- 類成員變數的初始化變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- 變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)變數
- 物件呼叫動態變數物件變數
- Python學習之變數、物件和引用Python變數物件
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- Python可變物件和不可變物件Python物件
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- Python閉包區域性變數問題Python變數
- C語言--靜態區域性變數C語言變數