類的初始化練習和static關鍵字的用法
類的初始化過程
Student s = new Student();在記憶體中做了哪些事情?
載入Student.class檔案進記憶體
在棧記憶體為s開闢空間
在堆記憶體為學生物件開闢空間
對學生物件的成員變數進行預設初始化
對學生物件的成員變數進行顯示初始化
通過構造方法對學生物件的成員變數賦值
學生物件初始化完畢,把物件地址賦值給s變數
面向物件練習
定義一個類Demo,其中定義一個求兩個資料和的方法,定義一個測試了Test,進行測試。
/*
定義一個類Demo,其中定義一個求兩個資料和的方法,
定義一個測試了Test,進行測試。
變數什麼時候定義為成員變數:
如果這個變數是用來描述這個類的資訊的,那麼,該變數就應該定義為成員變數。
變數到底定義在哪裡好呢?
變數的範圍是越小越好。因為能及時的被回收。
*/
//方式1
/*
class Demo {
public int sum() {
int a = 10;
int b = 20;
int c = a + b;
return c;
}
}
*/
//方式1滿足了我們的要求,但是不好。
//因為參與操作的資料現在是固定的。
//方式2
/*
class Demo {
public int sum(int a,int b) {
return a + b;
}
}
*/
//方式2可以滿足我們的要求,但是呢我們學習過來面向物件的思想。
//我就再想,a,b可不可以定義為成員變數呢?
//如果可以,我們再改進一版
class Demo {
int a;
int b;
publicint sum() {
return a + b;
}
}
//雖然這種方式可以,並且好像是符合了面向物件的思想。
//但是不好。
//因為我們曾經說過:類是一組相關的屬性和行為的集合。
//並且類是通過事物轉換過來的
//而類中的成員變數就是事物的屬性
//屬性是用來描述事物的
//同理:成員變數其實是用來描述類的。
//測試類
class Test {
public
//建立物件
//方式1測試
/*
Demo d = new Demo();
System.out.println(d.sum());
*/
//方式2測試
/*
Demo d = new Demo();
int a = 10;
int b = 20;
System.out.println(d.sum(a,b));
*/
//方式3測試
Demo d = new Demo();
d.a = 10;
d.b = 20;
System.out.println(d.sum());
}
}
定義一個長方形類,定義 求周長和麵積的方法,然後定義一個測試了Test2,進行測試。
/*
定義一個長方形類,定義 求周長和麵積的方法,
然後定義一個測試了Test2,進行測試。
長方形的類:
成員變數:
長,寬
成員方法:
求周長:(長+寬)*2;
求面積:長*寬
注意:
import必須出現在所有的class前面。
*/
import java.util.Scanner;
class ChangFangXing {
//長方形的長
privateint length;
//長方形的寬
privateint width;
public ChangFangXing(){}
//僅僅提供setXxx()即可
publicvoid setLength(int length) {
this.length = length;
}
publicvoid setWidth(int width) {
this.width = width;
}
//求周長
publicint getZhouChang() {
return (length + width) * 2;
}
//求面積
publicint getArea() {
return length * width;
}
}
class Test2 {
publicstaticvoid main(String[] args) {
//建立鍵盤錄入物件
Scanner sc = new Scanner(System.in);
System.out.println("請輸入長方形的長:");
int length = sc.nextInt();
System.out.println("請輸入長方形的寬:");
int width = sc.nextInt();
//建立物件
ChangFangXing cfx = new ChangFangXing();
//先給成員變數賦值
cfx.setLength(length);
cfx.setWidth(width);
System.out.println("周長是:"+cfx.getZhouChang());
System.out.println("面積是:"+cfx.getArea());
}
}
定義一個員工類,自己分析出幾個成員,然後給出成員變數,構造方法,getXxx()/setXxx()方法,以及一個顯示所有成員資訊的方法。並測試。
/*
需求:
定義一個員工類,自己分析出幾個成員,
然後給出成員變數,構造方法,getXxx()/setXxx()方法,
以及一個顯示所有成員資訊的方法。並測試。
分析:
員工
成員變數:
員工編號,姓名,年齡
構造方法:
無參構造方法
成員方法:
getXxx()/setXxx()
show();
*/
class Employee {
//員工編號
private String employeeId;
//姓名
private String name;
//年齡
privateint age;
//構造方法
public Employee() {}
//getXxx()/setXxx()
public String getEmployeeId() {
return employeeId;
}
publicvoid setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getAge() {
return age;
}
publicvoid setAge(int age) {
this.age = age;
}
//顯示所有成員資訊的方法
publicvoid show() {
System.out.println("員工編號是:"+employeeId+"的這個人是:"+name+"的年齡是:"+age);
}
}
class EmployeeTest {
publicstaticvoid main(String[] args) {
//建立物件
Employee e = new Employee();
//給成員變數賦值
e.setEmployeeId("czbk9527");
e.setName("唐伯虎");
e.setAge(18);
//獲取資料
//System.out.println(e.getEmployeeId()+"---"+e.getName()+"---"+e.getAge());
//我們在Employee類中定義了一個show方法。所以,我們改進一下,使用show方法
e.show();
}
}
定義一個類MyMath,提供基本的加減乘除功能,然後進行測試。
/*
定義一個類MyMath,提供基本的加減乘除功能,然後進行測試。
*/
import java.util.Scanner;
class MyMath {
//加法功能
publicint add(int a,int b) {
return a + b;
}
//減法功能
publicint sub(int a,int b) {
return a - b;
}
//乘法功能
publicint mul(int a,int b){
return a * b;
}
//除法功能
publicint div(int a,int b) {
return a / b;
}
}
//測試類
class MyMathTest {
publicstaticvoid main(String[] args) {
//建立鍵盤錄入物件
Scanner sc = new Scanner(System.in);
System.out.println("請輸入第一個運算元:");
int firstNumber = sc.nextInt();
System.out.println("請輸入第二個運算元:");
int secondNumber = sc.nextInt();
//建立MyMath物件,並使用
MyMath mm = new MyMath();
System.out.println("加法結果:"+mm.add(firstNumber,secondNumber));
System.out.println("減法結果:"+mm.sub(firstNumber,secondNumber));
System.out.println("乘法結果:"+mm.mul(firstNumber,secondNumber));
System.out.println("除法結果:"+mm.div(firstNumber,secondNumber));
}
}
static關鍵字
可以修飾成員變數和成員方法
static關鍵字特點
隨著類的載入而載入
優先於物件存在
被類的所有物件共享
這也是我們判斷是否使用靜態關鍵字的條件
可以通過類名呼叫
static關鍵字注意事項
在靜態方法中是沒有this關鍵字的
靜態方法只能訪問靜態的成員變數和靜態的成員方法
/*
定義一個人類
姓名和年齡都是變化的,這個我能接收,因為每個人的姓名和年齡是不同的。
但是,我們現在選取的幾個人都是中國人,他們的國籍是一樣的。
一樣的國籍,我每次建立物件,在堆記憶體都要開闢這樣的空間,
我就覺得有點浪費了。怎麼辦呢?
針對多個物件有共同的這樣的成員變數值的時候,
Java就提高了一個關鍵字來修飾:static。
*/
class Person {
//姓名
String name;
//年齡
int age;
//國籍
//String country;
static String country;
public Person(){}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public Person(String name,int age,String country) {
this.name = name;
this.age = age;
this.country = country;
}
publicvoid show() {
System.out.println("姓名:"+name+",年齡:"+age+",國籍:"+country);
}
}
class PersonDemo {
publicstaticvoid main(String[] args) {
//建立物件1
Person p1 = new Person("鄧麗君",16,"中國");
類的初始化過程
Student s = new Student();在記憶體中做了哪些事情?
載入Student.class檔案進記憶體
在棧記憶體為s開闢空間
在堆記憶體為學生物件開闢 問題 首先考慮一個全域性變數的初始化順序問題 在標頭檔案1中: extern int b;
int a = b + 1;
在標頭檔案2中:
extern int a;
int b = a + 1;
原始檔中包含了標頭檔案1和標頭檔案2,這種情況下a和b可能的值是什麼呢?
雖然在開發過程一般不會出現上述這
深入理解final關鍵字和static關鍵字以及初始化順序
final關鍵字(基礎1中提到)
final關鍵字可以修飾類、方法和引用。 修飾類,該類不能被繼承。並且這個類的物件在堆中分配記憶體後地址不可變。 修飾方法,方法不能被子類重寫。 修飾引用,引用無法改變,對於基本型別,無法修 初始化列表 不能 構造 調用 ron 二次 art size strong
初始化和賦值對內置類型的成員沒有什麽大的差別,像任一個構造函數都能夠。但有的時候必須用帶有初始化列表的構造函數:
(1) 成員類型是沒有默認構造函數的類。若沒有提供顯式初始化時,則編譯器隱式 n) elf flag python highlight 初始 class PE bject
# #重寫父類初始化
class Person(object):
def __init__(self, flag=False, name="jim"):
zed ali ati ise reat div cto 練習 diff
// initialization/ConstructorTest2.java
// TIJ4 Chapter Initialization, Exercise 2, p158
/* Create 類初始化過程①,一個類要建立例項需要先載入並初始化該類--》main方法所在的類需要先載入和初始化②,一個子類要初始化需要先初始化父類③,一個類初始化就是執行<clinit>() 方法--》<clinit>() 由靜態類變數賦值程式碼和靜態程式碼塊組成--》靜態類變數賦值程式碼和靜態程
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
 
預設建構函式:未提供顯式初始值時,用來建立物件的建構函式。
class testClass {
public:
testClass();
摘要: Java有以下幾種方式建立類物件: 利用new關鍵字 利用反射Class.newInstance 利用Constructor.newIntance(相比Class.newInstance多了有參和私有建構函式) 利用Cloneable/Object.clone() 利
一. 類中的方法分為例項方法和類方法兩種,用static修飾的是類方法。二者有什麼區別呢?
例項方法:
當類的位元組碼檔案被載入到記憶體時,類的例項方法不會被分配入口地址,當該類建立物
作為一個程式設計師,絕大多數時候你都不需要關心一個類是怎麼被載入進記憶體的。這裡面 runtime linker 在你的程式碼還沒跑起來之前就已經做了很多複雜的工作。
對於大多類來說,知道這一點就已經相當足夠了。但是,有一些類可能需要做一些特殊的準備工作。比如初始化一個全域性的表,從 UserDefau
Java有以下幾種方式建立類物件:
利用new關鍵字
利用反射Class.newInstance
利用Constructor.newIntance(相比Class.newInstance多了有參和私有建構函式)
利用Cloneable/Object.clon
//: Playground - noun: a place where people can play
// 1. init() 類的初始化(構造方法)
// 使用預設的建構函式
class Student {
// 類屬性
var n
python2、python3:
python子類呼叫父類初始化函式有兩種方式,以下程式碼在python2和python3都能執行:
class A(object):
def __init__(self, x):
self.x = x
# 方法 題目
下面程式碼執行的結果是什麼?
Father 類
/**
* @author kevin
* @date 2019/7/8 15:48
*/
public class Father {
private int i = test();
private static int j = m 配置 目錄 sta files pda 添加文件 追蹤 str ssa 初始化創庫
$ git init// 或者clone一個已經存在的倉庫到本地$ git clone [email protected]/* */.com:Wesly186/JianDuAp 副本 大括號 跟著 rac clas main 靜態成員變量 abstract 全局變量 1. 靜態方法 通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調用此方法
聲明為static的方法有以下幾條限制: · 它們僅能調用其他的sta 推薦 構造方法 其他 如果 靈活 位置 map 機制 lis 一、final 根據程序上下文環境,它可以修飾非抽象類、非抽象類成員方法和變量。
final類不能被繼承,沒有子類,final類中的方法默認是final的。 final 靜態方法 訪問 過程 scu pan 表示 lte span 編譯 this關鍵字是Java中一類很特殊的關鍵字,首先它只能在方法內使用,用來表示調用這個方法的對象,在這一點上this和其他對對象的引用的操作是相同的。我們之所以可以在方法內部訪問到它是因為編譯器在方法調 相關推薦
類的初始化練習和static關鍵字的用法
C++從靜態物件的初始化順序理解static關鍵字
Java基礎4——深入理解final關鍵字和static關鍵字以及初始化順序
C++構造函數對類成員變量初始化,使用初始化列表和構造函數內部直接賦值 的差別
super 子類和父類初始化例子
類初始化和構造器初始化的區別
類初始化和例項初始化過程
OC學習篇之---類的初始化方法和點語法的使用
C++中的預設建構函式和初始化列表和子類呼叫父類建構函式
Java類初始化和例項化
java中子類初始化流程(包括靜態區和非靜態區)
Objc類的載入和初始化(+load和+initialize方法)
Java基礎學習系列-Java類初始化和例項化
類初始化和反初始化方法(init與deinit)
python2,python3子類呼叫父類初始化函式的方法和注意事項
03_javaSE面試題:類初始化和例項初始化
02.初始化倉庫和提交
Java中static關鍵字用法總結
Java基礎之final和static關鍵字
Chapter5_初始化與清理_this關鍵字