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