類的無參帶參方法、變量作用域、JavaDoc文檔註釋、包
如何定義類的方法
public 返回值類型 方法名(){
//方法的主體
}
return: 如果有返回值 跳出方法、返回結果、
如果一個方法有返回值的話,那調用這個方法就會得到這個方法的返回值
方法名一般采用駝峰命名法
Admin admin = new Admin();
對象是通過類來創建出來的,所以對象的類型是 Admin 也就是說 類是對象的類型
admin.方法名(); //調用無參的構造方法
同一個類中的方法,直接使用方法名調用該方法
不同類的方法,首先創建對象,再使用 對象名.方法名() 來調用
成員變量和局部變量
成員變量:
1、成員變量定義在類中,在整個類中都可以被訪問。
2、成員變量隨著對象的建立而建立,隨著對象的消失而消失,存在於對象所在的堆內存中。
3、成員變量有默認初始化值。
局部變量:
1、局部變量只定義在局部範圍內,如:函數內,語句內等,只在所屬的區域有效。
2、局部變量存在於棧內存中,作用的範圍結束,變量空間會自動釋放。
3、局部變量沒有默認初始化值
在使用變量時需要遵循的原則為:就近原則
首先在局部範圍找,有就使用;接著在成員位置找。
JavaDoc 註釋
javadoc 註釋以 /**開頭 */ 結尾
通過javadoc技術就可以同時生成程序的開發文檔
javaDoc 是有標簽的
生成JavaDoc文檔:
選擇 File --> Export 選項 ,彈出 導出 對話框, 選擇 java 菜單中的 javaDoc 選項 提交即可
定義帶參方法
<訪問修飾符> 返回值類型 <方法名> (<參數列表>){
//方法的主體
}
形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用。實參出現在主調函數中,進入被調函數後,實參變量也不能使用。
形參和實參的功能是作數據傳送。發生函數調用時, 主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。
1.形參變量只有在被調用時才分配內存單元,在調用結束時, 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數後則不能
再使用該形參變量。
2.實參可以是常量、變量、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,
輸入等辦法使實參獲得確定值。
3.實參和形參在數量上,類型上,順序上應嚴格一致, 否則會發生“類型不匹配”的錯誤。
4.函數調用中發生的數據傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函數調用過程中,形參的值發生改變,
而實參中的值不會變化。
數組作為參數的方法
對象作為參數的方法
public class Student {
//學生類
public int id;
public String name;
public int age;
public int score;
public void showinfo(){
System.out.println(id+"\t"+name+"\t"+age+"\t"+score);
}
public class StudentsBiz {
/**
* 學生管理類
*/
Student[] students = new Student[30];
//增加學生
public void addstudent(Student stu){
for (int i = 0; i < students.length; i++) {
if (students[i]==null) {
students[i]=stu;
break;
}
}
}
//顯示本班的學生信息
public void showStudents(){
System.out.println("本班的學生列表");
for (int i = 0; i < students.length; i++) {
if (students[i]!=null) {
students[i].showinfo();
}
}
System.out.println();
}
public static void main(String[] args) {
/**
* 對象作為參數的方法
* 示例5.
* 實例化學生對象並初始化
*/
Student student1 = new Student();
student1.id=10;
student1.name="王二";
student1.age=18;
student1.score=99;
Student student2 = new Student();
student2.id=11;
student2.name="張三";
student2.age=18;
student2.score=100;
//新增學生對象
StudentsBiz biz = new StudentsBiz();
biz.addstudent(student1);
biz.addstudent(student2);
biz.showStudents();
}
包(package)
包(package)用於將完成不同功能的類分類,放在不同的目錄(包)下。
包的命名
包的命名規則:將公司域名反轉作為包名。
包名一般每個字母都要小寫。
把類定義在某個包下面,一般在源文件開頭加上package xxx.yyy;
則類的全名是xxx.yyy.類名
如果定義類的時候沒有使用package指定包名,則Java認為類位於默認包裏面(default package)。
編譯執行
如果程序中聲明了包名,即首行寫了package com.xxx;
那麽如果按照一般的編譯方式 javac 源文件名.java
會在當前目錄下生成class文件。
然後直接用:java源文件名執行,則會報錯。
出現java.lang.NoClassDefFoundError
產生問題的原因
包的意義在於產生一種目錄結構,所以class文件必須位於相應的目錄層次結構中。
以package com.xxx為例:
一種解決方式是手工建立com文件夾,裏面建立xxx文件夾,把生成的class文件放在目錄結構中,並且執行的時候采用java 完整類名(即帶上包名)才能夠執行。
不需要手動建立文件夾的解決手段
使用編譯參數 -d的解決方法:
編譯的時候可以在javac命令中采用-d指定存放生成的類文件的位置。
-d . 可以在當前目錄下生成。
用如下命令:
javac –d . 源文件名.java
則編譯後在當前目錄下,編譯器會生成包的文件目錄層次結構,並且把class文件放入其中。
如果不用“.”,也可以指定目錄。
用java命令執行的時候需要將包的信息全部帶上,即用完整的加包名的形式執行。
執行:
java 完整類名
子包
有兩個包名,分別是aa.bb.cc與aa.bb.cc.dd,那麽我們稱後者為前者的子包。
導入
導入(import),將使用package分離的各個類導入回來,讓編譯器能夠找到所需要的類。
使用在同一個包下的類不需要導入可以直接用,使用不同的包下的類才需要導入。
使用格式:
import aaa.bbb.ccc;
可以使用通配符“*”代替類名,將包中的所有類導入:
import aaa.bbb.*;
註意:
import aaa.bbb.*;並不會導入import aaa.bbb.ccc包下面的類。
順序問題
關於package、import、class的順序問題:
1.首先需要定義包(package),可選;
2.接下來使用import進行導入,可選;
3.class或者interface的定義。
包導入與訪問權限
訪問權限修飾符有四類:
public:允許所有類訪問。
private:允許本類訪問。
protected:允許本類、子類、同一個包中的類訪問。
默認情況:即不加訪問修飾符的情況,允許本類和同一個包中的類訪問。
import相應的包之後只是使相應的類可見,是否可以訪問其中的成員還是由訪問修飾符所決定。如默認修飾的成員,即便將相應類的包導入,但是如果當前類不在同一個包中,還是不能訪問。
類的無參帶參方法、變量作用域、JavaDoc文檔註釋、包