Java快速入門(本文篇幅較長(zhǎng)沟突,建議點(diǎn)喜歡后收藏后閱讀)
每天學(xué)會(huì)一個(gè)知識(shí)點(diǎn)花颗,覺得不錯(cuò)的可以留言關(guān)注下,戳我主頁獲取Java資料(工具包惠拭,面試資料扩劝,視頻教學(xué),包含社群解答)
Java 對(duì)象和類
Java作為一種面向?qū)ο笳Z言求橄。支持以下基本概念:
- 多態(tài)
- 繼承
- 封裝
- 抽象
- 類
- 對(duì)象
- 實(shí)例
- 方法
- 消息解析
本節(jié)我們重點(diǎn)研究對(duì)象和類的概念今野。
- 對(duì)象:對(duì)象是類的一個(gè)實(shí)例,有狀態(tài)和行為罐农。例如条霜,一條狗是一個(gè)對(duì)象,它的狀態(tài)有:顏色涵亏、名字宰睡、品種;行為有:搖尾巴气筋、叫拆内、吃等。
- 類:類是一個(gè)模板宠默,它描述一類對(duì)象的行為和狀態(tài)麸恍。
Java中的對(duì)象
現(xiàn)在讓我們深入了解什么是對(duì)象。看看周圍真實(shí)的世界抹沪,會(huì)發(fā)現(xiàn)身邊有很多對(duì)象刻肄,車,狗融欧,人等等敏弃。所有這些對(duì)象都有自己的狀態(tài)和行為。
拿一條狗來舉例噪馏,它的狀態(tài)有:名字麦到、品種、顏色欠肾,行為有:叫瓶颠、搖尾巴和跑。
對(duì)比現(xiàn)實(shí)對(duì)象和軟件對(duì)象董济,它們之間十分相似步清。
軟件對(duì)象也有狀態(tài)和行為。軟件對(duì)象的狀態(tài)就是屬性虏肾,行為通過方法體現(xiàn)。
在軟件開發(fā)中欢搜,方法操作對(duì)象內(nèi)部狀態(tài)的改變封豪,對(duì)象的相互調(diào)用也是通過方法來完成。
Java中的類
類可以看成是創(chuàng)建Java對(duì)象的模板炒瘟。
通過下面一個(gè)簡(jiǎn)單的類來理解下Java中類的定義:
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
一個(gè)類可以包含以下類型變量:
- 局部變量:在方法吹埠、構(gòu)造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中疮装,方法結(jié)束后缘琅,變量就會(huì)自動(dòng)銷毀。
- 成員變量:成員變量是定義在類中廓推,方法體之外的變量刷袍。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗3蓡T變量可以被類中方法樊展、構(gòu)造方法和特定類的語句塊訪問呻纹。
- 類變量:類變量也聲明在類中,方法體之外专缠,但必須聲明為static類型雷酪。
一個(gè)類可以擁有多個(gè)方法,在上面的例子中:barking()涝婉、hungry()和sleeping()都是Dog類的方法哥力。
構(gòu)造方法
每個(gè)類都有構(gòu)造方法。如果沒有顯式地為類定義構(gòu)造方法墩弯,Java編譯器將會(huì)為該類提供一個(gè)默認(rèn)構(gòu)造方法吩跋。
在創(chuàng)建一個(gè)對(duì)象的時(shí)候蟀淮,至少要調(diào)用一個(gè)構(gòu)造方法。構(gòu)造方法的名稱必須與類同名钞澳,一個(gè)類可以有多個(gè)構(gòu)造方法怠惶。
下面是一個(gè)構(gòu)造方法示例:
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name
}
}
創(chuàng)建對(duì)象
對(duì)象是根據(jù)類創(chuàng)建的。在Java中轧粟,使用關(guān)鍵字new來創(chuàng)建一個(gè)新的對(duì)象策治。創(chuàng)建對(duì)象需要以下三步:
- 聲明:聲明一個(gè)對(duì)象,包括對(duì)象名稱和對(duì)象類型兰吟。
- 實(shí)例化:使用關(guān)鍵字new來創(chuàng)建一個(gè)對(duì)象通惫。
- 初始化:使用new創(chuàng)建對(duì)象時(shí),會(huì)調(diào)用構(gòu)造方法初始化對(duì)象混蔼。
下面是一個(gè)創(chuàng)建對(duì)象的例子:
public class Puppy{
public Puppy(String name){
//這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name
System.out.println("Passed Name is :" + name );
}
public static void main(String []args){
// 下面的語句將創(chuàng)建一個(gè)Puppy對(duì)象
Puppy myPuppy = new Puppy( "tommy" );
}
}
編譯并運(yùn)行上面的程序履腋,會(huì)打印出下面的結(jié)果:
Passed Name is :tommy
訪問實(shí)例變量和方法
通過已創(chuàng)建的對(duì)象來訪問成員變量和成員方法,如下所示:
/* 實(shí)例化對(duì)象 */
ObjectReference = new Constructor();
/* 訪問其中的變量 */
ObjectReference.variableName;
/* 訪問類中的方法 */
ObjectReference.MethodName();
下面的例子展示如何訪問實(shí)例變量和調(diào)用成員方法:
public class Puppy{
int puppyAge;
public Puppy(String name){
// 這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name
System.out.println("Passed Name is :" + name );
}
public void setAge( int age ){
puppyAge = age;
}
public int getAge( ){
System.out.println("Puppy's age is :" + puppyAge );
return puppyAge;
}
public static void main(String []args){
/* 創(chuàng)建對(duì)象 */
Puppy myPuppy = new Puppy( "tommy" );
/* 通過方法來設(shè)定age */
myPuppy.setAge( 2 );
/* 調(diào)用另一個(gè)方法獲取age */
myPuppy.getAge( );
/*你也可以像下面這樣訪問成員變量 */
System.out.println("Variable Value :" + myPuppy.puppyAge );
}
}
編譯并運(yùn)行上面的程序惭嚣,產(chǎn)生如下結(jié)果:
Passed Name is :tommy
Puppy's age is :2
Variable Value :2
源文件聲明規(guī)則
在本節(jié)的最后部分遵湖,我們將學(xué)習(xí)源文件的聲明規(guī)則。當(dāng)在一個(gè)源文件中定義多個(gè)類晚吞,并且還有import語句和package語句時(shí)延旧,要特別注意這些規(guī)則。
- 一個(gè)源文件中只能有一個(gè)public類
- 一個(gè)源文件可以有多個(gè)非public類
- 源文件的名稱應(yīng)該和public類的類名保持一致槽地。例如:源文件中public類的類名是Employee迁沫,那么源文件應(yīng)該命名為Employee.java。
- 如果一個(gè)類定義在某個(gè)包中捌蚊,那么package語句應(yīng)該在源文件的首行集畅。
- 如果源文件包含import語句,那么應(yīng)該放在package語句和類定義之間缅糟。如果沒有package語句挺智,那么import語句應(yīng)該在源文件中最前面。
- import語句和package語句對(duì)源文件中定義的所有類都有效溺拱。在同一源文件中逃贝,不能給不同的類不同的包聲明。
類有若干種訪問級(jí)別迫摔,并且類也分不同的類型:抽象類和final類等沐扳。這些將在訪問控制章節(jié)介紹。
除了上面提到的幾種類型句占,Java還有一些特殊的類沪摄,如:內(nèi)部類、匿名類。
Java包
包主要用來對(duì)類和接口進(jìn)行分類杨拐。當(dāng)開發(fā)Java程序時(shí)祈餐,可能編寫成百上千的類,因此很有必要對(duì)類和接口進(jìn)行分類哄陶。
Import語句
在Java中帆阳,如果給出一個(gè)完整的限定名,包括包名屋吨、類名蜒谤,那么Java編譯器就可以很容易地定位到源代碼或者類。Import語句就是用來提供一個(gè)合理的路徑至扰,使得編譯器可以找到某個(gè)類鳍徽。
例如,下面的命令行將會(huì)命令編譯器載入java_installation/java/io路徑下的所有類
import java.io.*;
一個(gè)簡(jiǎn)單的例子
在該例子中敢课,我們創(chuàng)建兩個(gè)類:Employee和EmployeeTest阶祭。
首先打開文本編輯器,把下面的代碼粘貼進(jìn)去直秆。注意將文件保存為Employee.java濒募。
Employee類有四個(gè)成員變量:name、age切厘、designation和salary萨咳。該類顯式聲明了一個(gè)構(gòu)造方法,該方法只有一個(gè)參數(shù)疫稿。
import java.io.*;
public class Employee{
String name;
int age;
String designation;
double salary;
// Employee 類的構(gòu)造器
public Employee(String name){
this.name = name;
}
// 設(shè)置age的值
public void empAge(int empAge){
age = empAge;
}
/* 設(shè)置designation的值*/
public void empDesignation(String empDesig){
designation = empDesig;
}
/* 設(shè)置salary的值*/
public void empSalary(double empSalary){
salary = empSalary;
}
/* 打印信息 */
public void printEmployee(){
System.out.println("Name:"+ name );
System.out.println("Age:" + age );
System.out.println("Designation:" + designation );
System.out.println("Salary:" + salary);
}
}
程序都是從main方法開始執(zhí)行。為了能運(yùn)行這個(gè)程序鹃两,必須包含main方法并且創(chuàng)建一個(gè)實(shí)例對(duì)象遗座。
下面給出EmployeeTest類,該類實(shí)例化2個(gè)Employee類的實(shí)例俊扳,并調(diào)用方法設(shè)置變量的值途蒋。
將下面的代碼保存在EmployeeTest.java文件中。
import java.io.*;
public class EmployeeTest{
public static void main(String args[]){
/* 使用構(gòu)造器創(chuàng)建兩個(gè)對(duì)象 */
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
// 調(diào)用這兩個(gè)對(duì)象的成員方法
empOne.empAge(26);
empOne.empDesignation("Senior Software Engineer");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
編譯這兩個(gè)文件并且運(yùn)行EmployeeTest類馋记,可以看到如下結(jié)果:
C :> javac Employee.java
C :> vi EmployeeTest.java
C :> javac EmployeeTest.java
C :> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0