一臀晃、構造方法
- 當一個對象被創(chuàng)建時候觉渴,構造方法用來初始化該對象,給對象的成員變量賦初始值积仗。
小貼士:無論你與否自定義構造方法疆拘,所有的類都有構造方法,因為Java自動提供了一個無參數(shù)構造方法寂曹, 一旦自己定義了構造方法哎迄,Java自動提供的默認無參數(shù)構造方法就會失效。
- 構造方法的定義格式:
1.修飾符 構造方法名(參數(shù)列表){ // 方法體 }
- 構造方法的寫法上隆圆,方法名與它所在的類名相同漱挚。它沒有返回值,所以不需要返回值類型渺氧,甚至不需要void旨涝。使用 構造方法后,代碼如下:
package com.neusoft;
public class Student {
private String name;
private int age;
// 無參數(shù)構造方法
public Student() {
};
// 有參數(shù)構造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
-
注意事項
:
1.如果你不提供構造方法侣背,系統(tǒng)會給出無參數(shù)構造方法白华。
2.如果你提供了構造方法慨默,系統(tǒng)將不再提供無參數(shù)構造方法。
3.構造方法是可以重載的弧腥,既可以定義參數(shù)厦取,也可以不定義參數(shù)
二、標準代碼——JavaBean
- JavaBean 是 Java語言編寫類的一種標準規(guī)范管搪。符合 JavaBean 的類虾攻,要求類必須是具體的和公共的,并且具有無 參數(shù)的構造方法更鲁,提供用來操作成員變量的 set 和 get 方法霎箍。
格式:
public class ClassName{
//成員變量
//構造方法
//無參構造方法【必須】
//有參構造方法【建議】
//成員方法
//getXxx()
//setXxx()
}
- 編寫符合 JavaBean 規(guī)范的類,以學生類為例澡为,標準代碼如下:
package com.neusoft;
public class StudentJavaBean{
// 成員變量
private String name;
private int age;
// 無參構造方法【必須】
public StudentJavaBean(){
}
// 有參構造方法【建議】
public StudentJavaBean(String name, int age){
this.name = name;
this.age = age;
}
// 成員方法
// getxxx()
public String getName(){
return name;
}
public int getAge(){
return age;
}
// setxxx()
public void setName(String name){
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
- 測試類漂坏,代碼如下:
package com.neusoft;
public class TextStudentJavaBean {
// JavaBean 爪哇 的 咖啡豆 是一種Java的標準規(guī)范.
// 符合JavaBean的類要求類1、必須是具體的和公共的/2缀壤、并且具有無參構造方法
// 3樊拓、提供用來操作成員變量的set和get方法纠亚, 和數(shù)據(jù)庫中表字段對應的實體類就是一個典型JavaBean
// 格式
// 成員變量
// 無參構造方法【必須】
// 有參構造方法【建議】
// 成員方法
// getxxx()
// setxxx()
public static void main(String[] args) {
// 無參的構造方法的調(diào)用
StudentJavaBean s = new StudentJavaBean();
s.setName("趙子龍");
s.setAge(18);
System.out.println(s.getName() + "---" + s.getAge());
// 有參的構造方法的調(diào)用
StudentJavaBean s2 = new StudentJavaBean("關云長", 30);
System.out.println(s2.getName() + "---" + s2.getAge());
}
}
- 快速生成JavaBean的例子(定義一個員工類):
package com.neusoft;
public class EmpJavaBean {
// 員工姓名
private String empName;
// 工號
private int empNo;
// 職位
private String job;
// 薪資
private double salary;
public EmpJavaBean() {
}
public EmpJavaBean(String empName, int empNo, String job, double salary){
this.empName = empName;
this.empNo = empNo;
this.job = job;
this.salary = salary;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
測試類:
+package com.neusoft;
public class TestEmpJavaBean {
public static void main(String[] args) {
EmpJavaBean emp = new EmpJavaBean("孫權", 3306, "Java工程師", 23999);
System.out.println("姓名:"+ emp.getEmpName()+" "+"薪資:"+emp.getSalary());
}
}
三塘慕、常用基礎API
什么是API:
API(Application Programming Interface),應用程序編程接口蒂胞。Java API是一本程序員的字典 图呢,是JDK中提供給 我們使用的類的說明文檔。這些類將底層的代碼實現(xiàn)封裝了起來骗随,我們不需要關心這些類是如何實現(xiàn)的蛤织,只需要學習這些類如何使用即可。所以我們可以通過查詢API的方式鸿染,來學習Java提供的類指蚜,并得知如何使用它們。
- API使用步驟
1.打開幫助文檔涨椒。
2.點擊顯示摊鸡,找到索引,看到輸入框蚕冬。
3.你要找誰免猾?在輸入框里輸入,然后回車囤热。
4.看包猎提。java.lang下的類不需要導包,其他需要旁蔼。
5.看類的解釋和說明锨苏。
6.學習構造方法疙教。
7.使用成員方法。
1.Scanner類
- 一個可以解析基本類型和字符串的簡單文本掃描器伞租。 例如松逊,以下代碼使用戶能夠從 System.in 中讀取一個數(shù):
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
備注:System.in 系統(tǒng)輸入指的是通過鍵盤錄入數(shù)據(jù)。
(1)引用類型使用步驟
- 導包
使用import關鍵字導包肯夏,在類的所有代碼之前導包经宏,引入要使用的類型,java.lang包下的所有類無需導入驯击。 格
式:
1.import 包名.類名;
舉例:
1.java.util.Scanner;
(2)創(chuàng)建對象
- 使用該類的構造方法烁兰,創(chuàng)建一個該類的對象。 格式:
1.數(shù)據(jù)類型 變量名 = new 數(shù)據(jù)類型(參數(shù)列表);
舉例:
1.Scanner sc = new Scanner(System.in);
- 調(diào)用方法:
調(diào)用該類的成員方法徊都,完成指定功能沪斟。 格式
1.變量名.方法名();
例如:
1.int i = sc.nextInt(); // 接收一個鍵盤錄入的整數(shù)
(3)Scanner使用步驟
- 查看類
java.util.Scanner :該類需要import導入后使用。 - 查看構造方法
public Scanner(InputStream source) : 構造一個新的 Scanner 暇矫,它生成的值是從指定的輸入流掃描的主之。 - 查看成員方法
public int nextInt() :將輸入信息的下一個標記掃描為一個 int 值。
使用Scanner類李根,完成接收鍵盤錄入數(shù)據(jù)的操作槽奕,代碼如下:
//1. 導包
import java.util.Scanner;
public class Demo01_Scanner {
public static void main(String[] args) {
//2. 創(chuàng)建鍵盤錄入數(shù)據(jù)的對象
Scanner sc = new Scanner(System.in);
//3. 接收數(shù)據(jù)
System.out.println("請錄入一個整數(shù):");
int i = sc.nextInt();
//4. 輸出數(shù)據(jù)
System.out.println("i:"+i);
}
}
- 案例一:鍵盤錄入兩個數(shù)據(jù)并求和,代碼如下:
import java.util.Scanner;
public class Test01Scanner {
public static void main(String[] args) {
// 創(chuàng)建對象
Scanner sc = new Scanner(System.in);
// 接收數(shù)據(jù)
System.out.println("請輸入第一個數(shù)據(jù):");
int a = sc.nextInt();
System.out.println("請輸入第二個數(shù)據(jù):");
int b = sc.nextInt();
// 對數(shù)據(jù)進行求和
int sum = a + b;
System.out.println("sum:" + sum);
}
}
- 案例二:鍵盤錄入三個數(shù)據(jù)并獲取最大值房轿,代碼如下:
import java.util.Scanner;
public class Test02Scanner {
public static void main(String[] args) {
// 創(chuàng)建對象
Scanner sc = new Scanner(System.in);
// 接收數(shù)據(jù)
System.out.println("請輸入第一個數(shù)據(jù):");
int a = sc.nextInt();
System.out.println("請輸入第二個數(shù)據(jù):");
int b = sc.nextInt();
System.out.println("請輸入第三個數(shù)據(jù):");
int c = sc.nextInt();
// 如何獲取三個數(shù)據(jù)的最大值
int temp = (a > b ? a : b);
int max = (temp > c ? temp : c);
System.out.println("max:" + max);
}
}
(4)匿名對象
- 創(chuàng)建對象時粤攒,只有創(chuàng)建對象的語句,卻沒有把對象地址值賦值給某個變量囱持。雖然是創(chuàng)建對象的簡化寫法夯接,但是應用場景非常有限
- 匿名對象 :沒有變量名的對象,格式:
1.new 類名(參數(shù)列表)纷妆;
舉例:
1.new Scanner(System.in)盔几;
- 應用場景
1.創(chuàng)建匿名對象直接調(diào)用方法,沒有變量名掩幢。
new Scanner(System.in).nextInt();
2.一旦調(diào)用兩次方法逊拍,就是創(chuàng)建了兩個對象,造成浪費粒蜈,請看如下代碼顺献。
new Scanner(System.in).nextInt();
new Scanner(System.in).nextInt();
- 小貼士:一個匿名對象,只能使用一次枯怖。
3.匿名對象可以作為方法的參數(shù)和返回值
作為參數(shù)
class Test {
public static void main(String[] args) {
// 普通方式
Scanner sc = new Scanner(System.in);
input(sc);
//匿名對象作為方法接收的參數(shù)
input(new Scanner(System.in));
}
public static void input(Scanner sc){
System.out.println(sc);
}
}
作為返回值
class Test2 {
public static void main(String[] args) {
// 普通方式
Scanner sc = getScanner();
}
public static Scanner getScanner(){
//普通方式
//Scanner sc = new Scanner(System.in);
//return sc;
//匿名對象作為方法返回值
return new Scanner(System.in);
}
}
2.Random類
- 此類的實例用于生成偽隨機數(shù)注整。
例如,以下代碼使用戶能夠得到一個隨機數(shù):
Random r = new Random();
int i = r.nextInt();
- Random使用步驟
1.查看類
java.util.Random :該類需要 import導入使后使用。
2.查看構造方法
public Random() :創(chuàng)建一個新的隨機數(shù)生成器肿轨。
3.查看成員方法
public int nextInt(int n) :返回一個偽隨機數(shù)寿冕,范圍在 0 (包括)和 指定值 n (不包括)之間的int 值。 - 使用Random類椒袍,完成生成3個10以內(nèi)的隨機整數(shù)的操作驼唱,代碼如下:
//1. 導包
import java.util.Random;
public class Demo01_Random {
public static void main(String[] args) {
//2. 創(chuàng)建鍵盤錄入數(shù)據(jù)的對象
Random r = new Random();
for(int i = 0; i < 3; i++){
//3. 隨機生成一個數(shù)據(jù)
int number = r.nextInt(10);
//4. 輸出數(shù)據(jù)
System.out.println("number:"+ number);
}
}
}
備注:創(chuàng)建一個 Random 對象,每次調(diào)用 nextInt() 方法驹暑,都會生成一個隨機數(shù)玫恳。
- 練習
1.獲取隨機數(shù)
獲取1-n之間的隨機數(shù),包含n优俘,代碼如下:
import java.util.Random;
public class Test01Random {
public static void main(String[] args) {
int n = 50;
// 創(chuàng)建對象
Random r = new Random();
// 獲取隨機數(shù)
int number = r.nextInt(n) + 1;
// 輸出隨機數(shù)
System.out.println("number:" + number);
}
}
2.猜數(shù)字小游戲:
// 導包
import java.util.Random;
public class Test02Random {
public static void main(String[] args) {
// 系統(tǒng)產(chǎn)生一個隨機數(shù)1‐100之間的京办。
Random r = new Random();
int number = r.nextInt(100) + 1;
while(true){
// 鍵盤錄入我們要猜的數(shù)據(jù)
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要猜的數(shù)字(1‐100):");
int guessNumber = sc.nextInt();
// 比較這兩個數(shù)據(jù)(用if語句)
if (guessNumber > number) {
System.out.println("你猜的數(shù)據(jù)" + guessNumber + "大了");
} else if (guessNumber < number) {
System.out.println("你猜的數(shù)據(jù)" + guessNumber + "小了");
} else {
System.out.println("恭喜你,猜中了");
break;
}
}
}
}
3.ArrayList類
- 什么是ArrayList類
java.util.ArrayList 是大小可變的數(shù)組的實現(xiàn),存儲在內(nèi)的數(shù)據(jù)稱為元素帆焕。此類提供一些方法來操作內(nèi)部存儲
的元素惭婿。 ArrayList 中可不斷添加元素,其大小也自動增長叶雹。
ArrayList使用步驟:
1.查看類
java.util.ArrayList <E> :該類需要 import導入使后使用财饥。
<E> ,表示一種指定的數(shù)據(jù)類型折晦,叫做泛型钥星。 E ,取自Element(元素)的首字母筋遭。在出現(xiàn) E 的地方打颤,我們使
用一種引用數(shù)據(jù)類型將其替換即可,表示我們將存儲哪種引用類型的元素漓滔。代碼如下:
ArrayList<String>,ArrayList<Student>
2.查看構造方法
public ArrayList() :構造一個內(nèi)容為空的集合乖篷。
3.基本格式:
ArrayList<String> list = new ArrayList<String>();
4.在JDK 7后,右側(cè)泛型的尖括號之內(nèi)可以留空响驴,但是<>仍然要寫。簡化格式:
ArrayList<String> list = new ArrayList<>();
5.查看成員方法
public boolean add(E e) : 將指定的元素添加到此集合的尾部撕蔼。
參數(shù) E e 豁鲤,在構造ArrayList對象時, <E> 指定了什么數(shù)據(jù)類型鲸沮,那么 add(E e) 方法中琳骡,只能添加什么數(shù)據(jù)類型的對象。
- 使用ArrayList類讼溺,存儲三個字符串元素楣号,代碼如下:
public class Test02StudentArrayList {
public static void main(String[] args) {
//創(chuàng)建學生數(shù)組
ArrayList<String> list = new ArrayList<>();
//創(chuàng)建學生對象
String s1 = "曹操";
String s2 = "劉備";
String s3 = "孫權";
//打印學生ArrayList集合
System.out.println(list);
//把學生對象作為元素添加到集合
list.add(s1);
list.add(s2);
list.add(s3);
//打印學生ArrayList集合
System.out.println(list);
}
}
常用方法和遍歷
對于元素的操作,基本體現(xiàn)在——增、刪、查炫狱。常用的方法有:
- public boolean add(E e) :將指定的元素添加到此集合的尾部藻懒。
- public E remove(int index) :移除此集合中指定位置上的元素。返回被刪除的元素视译。
3.public E get(int index) :返回此集合中指定位置上的元素嬉荆。返回獲取的元素。
4.public int size() :返回此集合中的元素數(shù)酷含。遍歷集合時鄙早,可以控制索引范圍,防止越界椅亚。
- 這些都是最基本的方法蝶锋,操作非常簡單,代碼如下:
public class Demo01ArrayListMethod {
public static void main(String[] args) {
//創(chuàng)建集合對象
ArrayList<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//public E get(int index):返回指定索引處的元素
System.out.println("get:"+list.get(0));
System.out.println("get:"+list.get(1));
System.out.println("get:"+list.get(2));
//public int size():返回集合中的元素的個數(shù)
System.out.println("size:"+list.size());
//public E remove(int index):刪除指定索引處的元素什往,返回被刪除的元素
System.out.println("remove:"+list.remove(0));
//遍歷輸出
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
}
如何存儲基本數(shù)據(jù)類型
-
ArrayList對象不能存儲基本類型扳缕,只能存儲引用類型的數(shù)據(jù)。類似 <int> 不能寫别威,但是存儲基本數(shù)據(jù)類型對應的
包裝類型是可以的躯舔。所以,想要存儲基本類型數(shù)據(jù)省古, <> 中的數(shù)據(jù)類型粥庄,必須轉(zhuǎn)換后才能編寫,轉(zhuǎn)換寫法如下:
我們發(fā)現(xiàn)豺妓,只有 Integer 和 Character 需要特殊記憶惜互,其他基本類型只是首字母大寫即可。那么存儲基本類型數(shù)據(jù)琳拭,代碼如下
public class Demo02ArrayListMethod {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
}
}
ArrayList練習
1.生成6個1~33之間的隨機整數(shù),添加到集合,并遍歷
public class Test01ArrayList {
public static void main(String[] args) {
// 創(chuàng)建Random 對象
Random random = new Random();
// 創(chuàng)建ArrayList 對象
ArrayList<Integer> list = new ArrayList<>();
// 添加隨機數(shù)到集合
for (int i = 0; i < 6; i++) {
int r = random.nextInt(33) + 1;
list.add(r);
}
// 遍歷集合輸出
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
- 創(chuàng)建一個學生數(shù)組,存儲劉训堆、關、張白嘁、趙 四位同學的信息
1.
package com.neusoft;
public class Test01StudentArray {
// 創(chuàng)建一個學生數(shù)組,存儲劉坑鱼、關、張絮缅、趙 四位同學的信息
public static void main(String[] args) {
// 創(chuàng)建一個StudentJavaBean類的數(shù)組對象鲁沥, 名字叫students
StudentJavaBean[] students = new StudentJavaBean[100];
// 創(chuàng)建四個StudentJavaBeant類實例,分別初始化劉耕魄、關画恰、張、趙 四位同學的信息
StudentJavaBean s1 = new StudentJavaBean("劉玄德", 50);
StudentJavaBean s2 = new StudentJavaBean("關云長", 45);
StudentJavaBean s3 = new StudentJavaBean("張翼德", 42);
StudentJavaBean s4 = new StudentJavaBean("趙子龍", 41);
// 把這四個實例 賦值給 students
students[0] = s1;
students[1] = s2;
students[2] = s3;
students[3] = s4;
// 遍歷輸出這四個同學的名字個年齡
for (int i = 0; i <students.length ; i++) {
StudentJavaBean s = students[i];
System.out.println(s.getName()+"+++"+s.getAge());
}
// 上面我們使用的是數(shù)組對象吸奴,好處是一個容器允扇,可以存儲多個對象缠局,這樣的話一個變量就可以存放很多信息
// 但是數(shù)組對象在創(chuàng)建的時候容量是固定的,無法根據(jù)需求動態(tài)擴容
// java 提供了一個ArrayList類蔼两, 是大小可變的數(shù)組甩鳄,
// 存儲在數(shù)組中的數(shù)據(jù)我們一般叫元素,可以不斷添加元素,大小也會不斷增長
}
}
2.
package com.neusoft;
import java.util.ArrayList;
public class Test02StudentArray {
public static void main(String[] args) {
/**
* new ArrayList<Student>(); // <E>表示一種指定的數(shù)據(jù)類型,叫做泛型
* new ArrayList<String>(); // <E>表示一種指定的數(shù)據(jù)類型,叫做泛型
* new ArrayList<Integer>(); // <E>表示一種指定的數(shù)據(jù)類型,叫做泛型
*/
// 使用ArrayList jdk 1.7之前
// ArrayList<String> list = new ArrayList<String>();
// 使用ArrayList jdk 1.7之后
ArrayList<StudentJavaBean> list = new ArrayList<>();
// 指定元素添加到集合的尾部
// list.add("張三");
// 創(chuàng)建劉额划、關妙啃、張、趙 四位同學的信息
StudentJavaBean s1 = new StudentJavaBean("劉玄德", 50);
StudentJavaBean s2 = new StudentJavaBean("關云長", 45);
StudentJavaBean s3 = new StudentJavaBean("張翼德", 42);
StudentJavaBean s4 = new StudentJavaBean("趙子龍", 41);
// 進行添加操作
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
// 打印list
System.out.println(list);
System.out.println(list.size());
// 遍歷ArrayLisy的第一種方式fori 循環(huán)
for (int i = 0; i <list.size() ; i++) {
// StudentJavaBean s = list.get(i);
// System.out.println(s.getName());
System.out.println(list.get(i).getName());
}
}
}
3.打印集合方法
定義以指定格式打印集合的方法(ArrayList類型作為參數(shù))俊戳,使用{}擴起集合揖赴,使用@分隔每個元素。格式參照 {元素
@元素@元素}
public class Test03ArrayList {
public static void main(String[] args) {
// 創(chuàng)建集合對象
ArrayList<String> list = new ArrayList<String>();
// 添加字符串到集合中
list.add("張三豐");
list.add("宋遠橋");
list.add("張無忌");
list.add("殷梨亭");
// 調(diào)用方法
printArrayList(list);
}
public static void printArrayList(ArrayList<String> list) {
// 拼接左括號
System.out.print("{");
// 遍歷集合
for (int i = 0; i < list.size(); i++) {
// 獲取元素
String s = list.get(i);
// 拼接@符號
if (i != list.size() ‐ 1) {
System.out.print(s + "@");
} else {
// 拼接右括號
System.out.print(s + "}");
}
}
}
}
4.獲取集合方法
定義獲取所有偶數(shù)元素集合的方法(ArrayList類型作為返回值)
public class Test04ArrayList {
public static void main(String[] args) {
// 創(chuàng)建Random 對象
Random random = new Random();
// 創(chuàng)建ArrayList 對象
ArrayList<Integer> list = new ArrayList<>();
// 添加隨機數(shù)到集合
for (int i = 0; i < 20; i++) {
int r = random.nextInt(1000) + 1;
list.add(r);
}
// 調(diào)用偶數(shù)集合的方法
ArrayList<Integer> arrayList = getArrayList(list);
System.out.println(arrayList);
}
public static ArrayList<Integer> getArrayList(ArrayList<Integer> list) {
// 創(chuàng)建小集合,來保存偶數(shù)
ArrayList<Integer> smallList = new ArrayList<>();
// 遍歷list
for (int i = 0; i < list.size(); i++) {
// 獲取元素
Integer num = list.get(i);
// 判斷為偶數(shù),添加到小集合中
if (num % 2 == 0){
smallList.add(num);
}
}
// 返回小集合
return smallList;
}
}
5.實現(xiàn)自己的動態(tài)數(shù)組(類似ArrayList)
+package com.neusoft;
//自己實現(xiàn)一個ArrayList01
public class OwnArrayList01 {
// 定義成員變量
// data 數(shù)組 存儲數(shù)據(jù)
private int[] data;
// 集合中有效元素的個數(shù)
private int size;
// 構造函數(shù)抑胎, 傳入數(shù)組的初始容量
public OwnArrayList01(int capacity){
data = new int[capacity];
size = 0;
}
// 定義無參構造方法嗎默認容量是10
public OwnArrayList01(){
this(10);
}
// public OwnArrayList01(){
// data = new int[10];
// size = 0;
// }
// 成員方法
// 獲取數(shù)組中元素的個數(shù)
public int getSize(){
return size;
}
// 獲取數(shù)組的容量
public int getCapacity(){
return data.length;
}
// 獲取數(shù)組是否為空
public boolean isEmpty(){
return size == 0;
}
}
測試:
+package com.neusoft;
public class TestOwnArrayList01 {
public static void main(String[] args) {
// OwnArrayList01 list01 = new OwnArrayList01();
OwnArrayList01 list01 = new OwnArrayList01(15);
System.out.println(list01.getCapacity());
System.out.println(list01.getSize());
System.out.println(list01.isEmpty());
}
}