java基础知识-对象和类
前言:
因?yàn)橐獪?zhǔn)備Java面試,所有將java基礎(chǔ)知識(shí)點(diǎn)重新復(fù)習(xí)一遍,主要筆記來源于菜鳥教程和java核心技術(shù)的書籍中,也有一些博客上的資料(這些只供我個(gè)人學(xué)習(xí)使用)
Java 對(duì)象和類
- 對(duì)象:對(duì)象是類的一個(gè)實(shí)例,有狀態(tài)和行為。例如,一條狗是一個(gè)對(duì)象,它的狀態(tài)有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
- 類:類是一個(gè)模板,它描述一類對(duì)象的行為和狀態(tài)。
下圖中男孩女孩為類,而具體的每個(gè)人為該類的對(duì)象:
1、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)用也是通過方法來完成。
2、Java中的類
類可以看成是創(chuàng)建Java對(duì)象的模板。
通過下面一個(gè)簡(jiǎn)單的類來理解下Java中類的定義:
1 public class Dog{ 2 String breed; 3 int age; 4 String color; 5 void barking(){ 6 } 7 8 void hungry(){ 9 } 10 11 void sleeping(){ 12 } 13 }
一個(gè)類可以包含以下類型變量:
- 局部變量:在方法、構(gòu)造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會(huì)自動(dòng)銷毀。
- 成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗3蓡T變量可以被類中方法、構(gòu)造方法和特定類的語句塊訪問。
- 類變量:類變量也聲明在類中,方法體之外,但必須聲明為static類型。
一個(gè)類可以擁有多個(gè)方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog類的方法。
3、構(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òu)造方式示例:
1 public class Puppy{ 2 public Puppy(){ 3 } 4 5 public Puppy(String name){ 6 // 這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name 7 } 8 }4、創(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ì)象。
示例
1 public class Puppy{ 2 public Puppy(String name){ 3 //這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name 4 System.out.println("小狗的名字是 : " + name ); 5 } 6 public static void main(String []args){ 7 // 下面的語句將創(chuàng)建一個(gè)Puppy對(duì)象 8 Puppy myPuppy = new Puppy( "tom" ); 9 } 10 }編譯后結(jié)果為:小狗的名字是 : tom
5、訪問實(shí)例變量和方法
通過已創(chuàng)建的對(duì)象來訪問成員變量和成員方法,如下所示:
/* 實(shí)例化對(duì)象 */ObjectReference = new Constructor();/* 訪問其中的變量 */ObjectReference.variableName;/* 訪問類中的方法 */ObjectReference.MethodName();實(shí)例
下面的例子展示如何訪問實(shí)例變量和調(diào)用成員方法:
1 public class Puppy{ 2 int puppyAge; 3 public Puppy(String name){ 4 // 這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name 5 System.out.println("小狗的名字是 : " + name ); 6 } 7 8 public void setAge( int age ){ 9 puppyAge = age; 10 } 11 12 public int getAge( ){ 13 System.out.println("小狗的年齡為 : " + puppyAge ); 14 return puppyAge; 15 } 16 17 public static void main(String []args){ 18 /* 創(chuàng)建對(duì)象 */ 19 Puppy myPuppy = new Puppy( "tom" ); 20 /* 通過方法來設(shè)定age */ 21 myPuppy.setAge( 2 ); 22 /* 調(diào)用另一個(gè)方法獲取age */ 23 myPuppy.getAge( ); 24 /*你也可以像下面這樣訪問成員變量 */ 25 System.out.println("變量值 : " + myPuppy.puppyAge ); 26 } 27 }編譯并運(yùn)行上面的程序,產(chǎn)生如下結(jié)果:小狗的名字是 : tom ?小狗的年齡為 : 2 ?變量值 : 2
6、源文件聲明規(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)部類、匿名類。
7、Java-包(package)
包是Java語言提供的一種區(qū)別類名字命名空間的機(jī)制,它是類的一種文件組織和管理方式、是一組功能相似或相關(guān)的類或接口的集合。
Java package提供了訪問權(quán)限和命名的管理機(jī)制,它是Java中很基礎(chǔ)卻又非常重要的一個(gè)概念。
一、包的作用?
1 把功能相似或相關(guān)的類或接口組織在同一個(gè)包中,方便類的查找和使用。?
2 如同文件夾一樣,包也采用了樹形目錄的存儲(chǔ)方式。同一個(gè)包中的類名字是不同的,不同的包中的類的名字是可以相同的,當(dāng)同時(shí)調(diào)用兩個(gè)不同包中相同類名的類時(shí),
應(yīng)該加上包名加以區(qū)別。因此,包可以避免名字沖突。?
3 包也限定了訪問權(quán)限,擁有包訪問權(quán)限的類才能訪問某個(gè)包中的類。
二、包的定義?
在一個(gè).java文件中可以一個(gè)public類和多個(gè)非public類,如果要將這些類組織在一個(gè)包當(dāng)中,則在.java文件中除注釋以外的第一行使用關(guān)鍵字package即可實(shí)現(xiàn)。
當(dāng)需要調(diào)用此包中的類時(shí),就可以使用關(guān)鍵字import進(jìn)行導(dǎo)入。在定義包的時(shí)候,應(yīng)該注意幾點(diǎn):?
1 為了盡量使包名保持唯一性,包名通常采用小寫、按倒寫互聯(lián)網(wǎng)址的形式進(jìn)行定義。如:com.hank.www表示包文件放置的文件路徑為com/hank/www。?
2 在進(jìn)行命名包時(shí),應(yīng)該避免使用與系統(tǒng)發(fā)生沖突的名字,如java.lang、java.swing等。
三、包與包之間的訪問
1 package cn.itstu; 2 class PackageDemo 3 { 4 /* 5 將源文件編譯打包到C:\myclass 文件夾下 6 */ 7 public static void main(String args[]) 8 { 9 /* cmd輸入命令 10 1.javac -d c:\myclass DemoA.java 11 2.set classpath=c:\myclass 12 3.javac -d c:\myclass PackageDemo.java 13 4.java cn.itstu.PackageDemo 14 */ 15 packa.DemoA d=new packa.DemoA(); 16 d.show(); 17 18 //packb.DemoB b=new packb.DemoB(); 19 //b.method(); error 訪問權(quán)限不夠 20 } 21 } 1 package packa; 2 public class DemoA extends packb.DemoB //類的權(quán)限必須是public 3 { 4 5 public void show()//方法的權(quán)限也必須是public 6 { 7 System.out.println("demoa show run"); 8 method(); 9 } 10 11 } 1 package packb; 2 public class DemoB 3 { 4 /* public */ protected void method() 5 { 6 System.out.println("demob method run"); 7 } 8 9 /*當(dāng)method方法被public修飾,可以被其子類DemoA訪問, 10 也可以被其他包的類訪問,但是當(dāng)method方法被protected 11 修飾,method方法只能被其子類訪問。 12 * 結(jié)論:?
public ? ? ? protected ? ? ?default ? ? ? ? private 同一類中 ? ?OK ? ? ? ? ? ? OK ? ? ? ? ? ? ? ?OK ? ? ? ? ? ? ? ? OK 同一包中 ? ?OK ? ? ? ? ? ? OK ? ? ? ? ? ? ? ?OK ? ? ? ? ? ? ? ? NO 子類 ? ? ? ? ? ?OK ? ? ? ? ? ? OK ? ? ? ? ? ? ? ?NO ? ? ? ? ? ? ? ? NO 其他類中 ? ?OK ? ? ? ? ? ? NO ? ? ? ? ? ? ? ?NO ? ? ? ? ? ? ? ? NO四、導(dǎo)包 import
通過import我們可以簡(jiǎn)化類名的書寫。 包名我們一般用url,因?yàn)閡rl具有唯一性。如: package com.qq.demo; ?導(dǎo)包:import com.qq.demo.*; ?//*是通配符,表示導(dǎo)入com.qq.demo包下的所有類,開發(fā)中推薦使用導(dǎo)入具體類名,需要哪個(gè)類導(dǎo)入哪個(gè),可以節(jié)省內(nèi)存開銷,如: import com.qq.demo.ClassA; 注意:我們導(dǎo)入兩個(gè)包 import packa.*; ? import packb.*; ?如果這兩個(gè)包中有相同的類classA存在,我們?cè)谑褂妙惖臅r(shí)候必須指明使用哪個(gè)包下的該類 如 ?:packa.ClassA ?a=new packa.ClassA(); ? ? ? ?packb.ClassA ?b=new packb.ClassA();五:系統(tǒng)常用包
?
1、Java.lang包:java的核心類庫,包含了運(yùn)行java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學(xué)函數(shù)、字符串處理、線程、異常處理類等,系統(tǒng)缺省加載這個(gè)包?
2、java.io包:java語言的標(biāo)準(zhǔn)輸入/輸出類庫,如基本輸入/輸出流、文件輸入/輸出、過濾輸入/輸出流等等?
3、java.util包:Java的實(shí)用工具類庫Java.util包。在這個(gè)包中,Java提供了一些實(shí)用的方法和數(shù)據(jù)結(jié)構(gòu)。例如,Java提供日期(Data)類、日歷(Calendar)類來產(chǎn)生和獲取日期及時(shí)間,提供隨機(jī)數(shù)(Random)類產(chǎn)生各種類型的隨機(jī)數(shù),還提供了堆棧(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等類來表示相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。包含如處理時(shí)間的date類,處理變成數(shù)組的Vector類,以及stack和HashTable類
4、java.util.zip包:實(shí)現(xiàn)文件壓縮功能?
5、java.lang.reflect包:提供用于反射對(duì)象的工具?
6、java.awt.image包:處理和操縱來自于網(wǎng)上的圖片的java工具類庫?
7、java.wat.peer包:很少在程序中直接用到,使得同一個(gè)java程序在不同的軟硬件平臺(tái)上運(yùn)行?
8、java.applet包?
9、java.NET包:實(shí)現(xiàn)網(wǎng)絡(luò)功能的類庫有Socket類、ServerSocket類?
10、java.corba包和java.corba.orb包?
11、java.awt.datatransfer包:處理數(shù)據(jù)傳輸?shù)墓ぞ哳?#xff0c;包括剪貼板,字符串發(fā)送器等
12、java.awt包:構(gòu)建圖形用戶界面(GUI)的類庫,低級(jí)繪圖操作Graphics類,圖形界面組件和布局管理如 Checkbox類、Container類、LayoutManger接口等,以及界面用戶交互控制和事件響應(yīng),如Event類?
13、java.awt.event包:GUI事件處理包。?
14、java.sql包:實(shí)現(xiàn)JDBC的類庫。
轉(zhuǎn)載于:https://www.cnblogs.com/huststl/p/7582101.html
總結(jié)
以上是生活随笔為你收集整理的java基础知识-对象和类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows消息机制以及相关API
- 下一篇: 如何计算出int的数据范围