Java對象和類

?

轉自原文:http://www.yiibai.com/java/java_object_classes.html

java是一種面向對象的語言。由于具有面向對象特性的語言,Java支持以下基本概念:

  • 多態性
  • 繼承
  • 封裝
  • 抽象化
  • 對象
  • 實例
  • 方法
  • 消息解析

在本章中,我們將探討類和對象這些概念。

  • 對象?-?對象具有狀態和行為。例如:狗有狀態 - 顏色,名稱,繁殖以及行為,搖頭晃腦,吠叫,吃。對象是類的實例。

  • 類?-?一個類可以被定義為描述行為的模板/藍色印花/指出其類型支持的對象。

Java對象:

現在,我們深入研究什么是對象。如果考慮到現實世界中,可以發現身邊很多對象,汽車,狗,人等,這些對象都有一個狀態和行為。

如果我們考慮一只狗,那么它的狀態是 - 名稱,品種,顏色和行為 - 吠叫,搖擺,跑等

如果軟件對象與現實世界中的對象進行比較,它們具有非常相似的特征。

軟件對象也有狀態和行為。軟件對象的狀態存儲在字段和行為是通過方法如圖所示。

因此,在軟件開發中,方法上的一個對象的內部狀態和操作的對象對對象的通信是通過方法來完成。

Java中的類:

類是從中創建單個對象的藍圖。

類的樣本如下︰

public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sleeping(){ } }

一個類可以包含以下任意變量類型。

  • 局部變量:??方法里面,構造函數或塊中定義的變量稱為局部變量。該變量將被聲明和初始化的方法中,當該方法完成該變量將被銷毀。

  • 實例變量:?實例變量都在一個類,但任何方法之外的變量。這些變量在類被加載的實例化。實例變量可以從內部的任何方法,構造函數或特定類別的塊訪問。

  • 類變量:?類變量是在一個類中聲明,任何方法之外的變量,用static關鍵字。

類可以有任意數量的方法來訪問各種方法的值。在上面的例子中,barking(), hungry() 和 sleeping()的方法。

以下提到的一些在Java語言中需要尋找到類要討論的重要議題。

構造函數:

在討論關于類,其中最重要分課題之一是構造函數。每個類都有一個構造函數。如果我們不明確地寫一個構造函數的類,Java編譯器生成一個默認構造函數的類。

創建一個新的對象中的每個時間,至少有一個構造函數將被調用。構造函數的主要規則是,他們應該具有相同的名稱作為類。一個類可以有多個構造函數。

構造函數的例子如下︰

public class Puppy{ public Puppy(){ } public Puppy(String name){ // This constructor has one parameter, name. } }

Java還支持單實例類,在這里能夠創建的類只有一個實例。

創建對象:

如前面提到的,一個類提供的圖紙對象。所以基本上一個對象是從一個類創建的。在Java中,關鍵字 new 用于創建新的對象。

從類創建對象時有三個步驟:

  • 聲明: ?變量聲明,一個變量名的對象類型。

  • 實例:?“new”關鍵字是用來創建對象。

  • 初始化: ?關鍵字 new 后跟調用一個構造函數。這個調用初始化新的對象。

創建對象的實例在下面給出:

public class Puppy{ public Puppy(String name){ // This constructor has one parameter, name. System.out.println("Passed Name is :" + name ); } public static void main(String []args){ // Following statement would create an object myPuppy Puppy myPuppy = new Puppy( "tommy" ); } }

如果我們編譯并運行上面的程序,那么這將產生以下結果:

Passed Name is :tommy

訪問實例變量和方法:

實例變量和方法是通過創建的對象的訪問。要訪問一個實例變量的完全限定路徑應該如下:

/* First create an object */
ObjectReference = new Constructor(); /* Now call a variable as follows */ ObjectReference.variableName; /* Now you can call a class method as follows */ ObjectReference.MethodName();

例子:

這個例子說明了如何訪問一個類的實例變量和方法:

public class Puppy{ int puppyAge; public Puppy(String name){ // This constructor has one parameter, 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){ /* Object creation */ Puppy myPuppy = new Puppy( "tommy" ); /* Call class method to set puppy's age */ myPuppy.setAge( 2 ); /* Call another class method to get puppy's age */ myPuppy.getAge( ); /* You can access instance variable as follows as well */ System.out.println("Variable Value :" + myPuppy.puppyAge ); } }

如果我們編譯并運行上面的程序,那么這將產生以下結果:

Passed Name is :tommy Puppy's age is :2 Variable Value :2

源文件中聲明的規則:

正如本節的最后部分現在讓我們看看到源文件中聲明的規則。聲明類,import語句和包聲明在源文件時,這些規則是必不可少的。

  • 只能有一個有public類在每一個源文件。

  • 源文件可以有多個非公共類。

  • 公共類名應該是源文件,以及應當由?.java?在末尾附加的名稱。例如:類名是?public class?Employee{}?將源文件應為?Employee.java

  • 如果類在包中定義,那么?package?語句應該是在源文件中的第一條語句。

  • 如果?import?語句都存在,那么它們必須寫?package?語句和類聲明之間。如果沒有包(package)語句,那么import語句應該是源文件中的第一行。

  • 導入和包語句將意味著對所有現有的源文件中的類。不可能的聲明不同的 import和/或包語句不同類的源文件中。

類有幾個訪問級別,有不同類型的類,抽象類,final類等將在訪問修飾符章解釋這些。

除了上述類型的類,Java也有一些特殊的類稱為內部類和匿名類。

Java包:

簡單地,它是分類的類和接口的方式。在開發Java應用程序中,數以百計的類和接口將會被寫入,因此,分類這些類是必須的。

import語句:

在Java中,如果一個完全合格的名稱,其中包括包和類名,變量的話,編譯器可以很容易地找到源代碼或類。 import語句是給予適當的位置,是編譯器發現,特定的類的方法。

例如,下面的行會要求編譯器來加載所有目錄中 java安裝/java/io?可用的類:

import java.io.*;

一個簡單的案例:

對于研究案例,這里將創建兩個類。他們是?Employee?和?EmployeeTest

首先打開記事本,并添加下面的代碼。請記住,這是Employee類和類是一個公共類。現在,保存名稱為?Employee.java?這個源文件。

Employee類有四個實例變量的名字,年齡,名稱和工資。這個類有一個明確定義的構造函數,它接受一個參數。

import java.io.*; public class Employee{ String name; int age; String designation; double salary; // This is the constructor of the class Employee public Employee(String name){ this.name = name; } // Assign the age of the Employee to the variable age. public void empAge(int empAge){ age = empAge; } /* Assign the designation to the variable designation.*/ public void empDesignation(String empDesig){ designation = empDesig; } /* Assign the salary to the variable salary.*/ public void empSalary(double empSalary){ salary = empSalary; } /* Print the Employee details */ public void printEmployee(){ System.out.println("Name:"+ name ); System.out.println("Age:" + age ); System.out.println("Designation:" + designation ); System.out.println("Salary:" + salary); } }

正如先前在本教程中所提到的,從處理的?main?方法開始。因此,為了讓我們運行這個Employee類中應該有?main?方法,并應創建的對象。我們將創建這些任務一個單獨的類。

下面給出的是?EmployeeTest?類,它創建?Employee類的兩個實例,并調用方法為每個對象的每個變量賦值。

下面的代碼保存在?EmployeeTest.java?文件

import java.io.*; public class EmployeeTest{ public static void main(String args[]){ /* Create two objects using constructor */ Employee empOne = new Employee("James Smith"); Employee empTwo = new Employee("Mary Anne"); // Invoking methods for each object created 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(); } }

現在,編譯這兩個類,然后運行EmployeeTest看到的結果如下:

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

轉載于:https://www.cnblogs.com/yccmelody/p/5470316.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287849.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bzoj3224 Tyvj 1728 普通平衡樹題解--Treap

題面: Description您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&…

Blazor University (18)使用 RenderFragments 模板化組件 —— 創建 TabControl

原文鏈接:https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/創建一個 TabControl 組件源代碼[1]接下來我們將創建一個 TabControl 組件。這將教您如何實現以下目標:將數據傳遞到 RenderFragment 以為其…

Java之GC機制

1 JVM基本結構 1)類加載器classLoader:在JVM啟動時或者類運行時將需要的.class文件加載到內存中 2)內存區域(運行時數據區): 是在JVM運行的時候操作所分配的內存區 3)執行引擎:負…

ArcGIS實驗教程——實驗十八:疊置分析(Overlay Analysis)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 目 錄 一、實驗描述 二、實驗內容 三、實驗目的 四、實驗數據

《零基礎看得懂的C語言入門教程 》——(一)脫離學習誤區

本節視頻連接: https://www.bilibili.com/video/BV1Qv411t7ae 新手C語言學習有些誤區你應該知道,這樣學習起來事半功倍~一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由于自己是從初一時開始學習編程&#…

一套完整的導視設計案例_色彩導視藝術:烏克蘭基輔語言學校導視設計案例

學校導視設計案例建筑師Emil Dervish為烏克蘭基輔Underhub語言學校設計了色彩繽紛的導視系統,該設計靈感來源于倫敦地鐵,他希望通過彩色線條的大膽應用來營造輕松而歡樂的氛圍。讓我們一起來看看這座由“彩虹”做導視的學校。彩虹導視設計跟著紅色導視線…

C# 創建匿名管道

下面對匿名管道執行類似的操作。通過匿名管道,創建兩個彼此通信的任務。為了給管道的創建發出信號,使用 ManualResetEventSlim 對象,與內存映射文件一樣。在 Program 類的 Run 方法中,創建兩個任務,調用 Reader 和 Wri…

內測投票

create table DiaoYanTiMu (  Ids int(10) auto_increment not null primary key(),//把所需要的都寫上中間不需要符號隔開,設自增長列類型必須是int,主鍵的話必須不能為空not null, Title varchar(50) not null );/…

Android之通過Binder機制實現IPC和linux的傳統IPC的對比分析

一、 Android的Binder機制實現IPC 這里bind機制實現實現IPC模型這里不具體分析,簡單理解就是clint-server模型 涉及到4個模塊client、server、serverManager、bind底層驅動。 serverManager的作用是將字符形式的Binder(Server創建了Binder實體)名字轉化成Client中對該Bin…

Mysql 查詢統計練習

2019獨角獸企業重金招聘Python工程師標準>>> 1、建表 customers 顧客表 products 產品表 orders 訂單表 -- 顧客表 CREATE TABLE customers (c_id INT NOT NULL AUTO_INCREMENT,lastname VARCHAR(255),firstname VARCHAR(255),address VARCHAR(255),birthday DATETI…

【經典回放】多種語言系列數據結構算法:堆排序

目錄 一、堆排序算法分析 二、C#語言實現堆排序 三、C語言實現堆排序 一、堆排序算法分析

C++11模版元編程的應用

1.概述 關于C11模板元的基本用法和常用技巧,我在程序員2015年2月B《C11模版元編程》一文(后稱前文)中已經做了詳細地介紹,那么C11模版元編程用來解決什么實際問題呢,在實際工程中又該如何應用呢?本文將側重…

《零基礎看得懂的C語言入門教程 》——(二)C語言沒那么難簡單開發帶你了解流程

一、學習目標 了解DevC集成開發環境了解集成開發環境了解HelloWorld程序了解HelloWorld程序的編寫方法 目錄 C語言真的很難嗎?那是你沒看這張圖,化整為零輕松學習C語言。 第一篇:(一)脫離學習誤區 第二篇&#xff1…

11選5下期算法_本周六周日【高二直播】輔導網課預告:通用技術電控二三極管、多用電表測量、數字邏輯電路、解析枚舉遞歸算法,2022浙江選考技術...

01第19-21講 2020年11月28日29日開課目錄鯨學名師考點精講系統提高高二共3階段精品課夯實基礎沖刺技術選考97-100分!11月28日【高二|提高|直播】高二精品直播課講授:浙江選考技術科目第19講 高二綜合提高鯨學名師講授高中通用技術:第19講 電控…

十分鐘完成Bash 腳本進階!列舉Bash經典用法及其案例

前言:在linux中,Bash腳本是很基礎的知識,大家可能一聽腳本感覺很高大上,像小編當初剛開始學一樣,感覺會寫腳本的都是大神。雖然復雜的腳本是很燒腦,但是,當我們熟練的掌握了其中的用法與技巧&am…

【經典回放】多種語言系列數據結構算法:基數排序

目錄 一、算法思路 二、C#語言實現 三、C語言實現 一、算法思路 1. 思想基礎 基數排序的思想就是先找出待排序中的最大者,然后按最大者申請一個足夠大的內存空間,并將其初始化為零,然后將所有待排序的數裝入其中,標記裝入的數…

Java之ThreadPoolExcutor和四種常見的線程池

一、ThreadPoolExcutors的作用 java提供了ThreadPoolExcutors來創建一個線程池,我們為什么要用線程池呢? 1.降低資源的消耗:通過重復利用已經創建好的線程降低線程的創建和銷毀帶來的損耗 2.提高響應速度:因為線程池中的線程處于等待分配任…

探索鏈路追蹤在.NET6工業物聯網項目中的應用

如果覺得有用,請留言學到了。已經會了的老哥,請留言就這?可能遇到的問題工業物聯網系統自上而下一般分為ERP、Mes、SCADA、WCS、邊緣網關、設備等一個生產訂單從SAP發送到設備要經過上述多個系統,當某個環節出現問題,可…

《零基礎看得懂的C語言入門教程 》——(三)輕輕松松理解第一個C語言程序

一、學習目標 了解C語言代碼的一般結構了解函數的概念了解printf函數的使用方法了解頭文件的概念了解system函數的使用方法 目錄 C語言真的很難嗎?那是你沒看這張圖,化整為零輕松學習C語言。 第一篇:(一)脫離學習誤…

hdu_1728_逃離迷宮(bfs)

題目連接:http://acm.hdu.edu.cn/showproblem.php?pid1728 題意:走迷宮,找最小的拐角 題解:對BFS有了新的理解,DFS剪枝應該也能過,用BFS就要以拐角作為增量來搜,即以當前點為坐標,4…