<pre>
萬物皆對象
> 分類是人們認識世界的一個很自然的過程患朱,在日常生活中會不自覺地進行分類
身邊的對象
顧客
姓名—張浩
年齡—20
體重—60kg
操作:
購買商品
收銀員
員工號—10001
姓名—李明
部門—財務(wù)部
操作:
收款
打印賬單
對象的特征——屬性
屬性——對象具有的各種特征
每個對象的每個屬性都擁有特定值
例如:張浩和李明的年齡宿稀、姓名不一樣
對象的特征——方法(操作枫攀,行為)
方法——對象執(zhí)行的操作(通常會改變屬性的值)
> 對象:用來描述客觀事物的一個實體掰茶,由一組屬性和方法構(gòu)成
例子
屬性:
品牌:法拉利
型號:F360 Spider
顏色:黃色
價格:380萬元
方法:
發(fā)動
停止
加速
屬性:
顏色:白色
方法:
叫
跑
吃
> 對象同時具有屬性和方法兩項特性
>
> 對象的屬性和方法通常被封裝在一起顷链,共同體現(xiàn)事物的特性阎毅, 二者相輔相承焚刚,不能分割
說一說教室里的對象
描述他們的屬性和方法
從對象抽象出“類”
抽取出下列對象的共同特征(屬性和方法)
> 類是模子,定義對象將會擁有的特征(屬性)和行為(方法)
類是對象的類型
不同于int類型:具有方法
-
類是抽象的概念扇调,僅僅是模板
比如說:“人”
-
對象是一個你能夠看得到矿咕、摸得著的具體實體
趙本山,劉德華狼钮,趙麗穎
> 所有Java程序都以類class為組織單元
關(guān)鍵字class定義自定義的數(shù)據(jù)類型
public class 類名 {
//定義屬性部分
屬性1的類型 屬性1;
屬性2的類型 屬性2;
…
屬性n的類型 屬性n;
//定義方法部分
方法1;
方法2;
…
方法m;
}
定義一個類的步驟
定義類名
編寫類的屬性
編寫類的方法
在不同城市的培訓(xùn)中心碳柱,會感受到相同的環(huán)境和教學(xué)氛圍,用類的思想輸出中心信息
public class School {
String schoolName; //中心名稱
int classNumber; //教室數(shù)目
int labNumber; //機房數(shù)目
public void showCenter() {
System.out.println(schoolName + "培訓(xùn)學(xué)員\n" + "配備:"
+ classNumber + "教" + labNumber + "機");
}
}
使用對象的步驟
創(chuàng)建對象
類名 對象名 = new 類名();
School center = new School();
引用對象成員:使用“.”進行以下操作
引用類的屬性:對象名.屬性
引用類的方法:對象名.方法名()
center.name = "北京中心"; //給name屬性賦值
center.showCenter(); //調(diào)用showCenter()方法
public class InitialSchool {
public static void main(String[] args) {
School center = new School();
System.out.println("***初始化成員變量前***");
center. showCenter();//看到什么效果熬芜?
center.schoolName = "北京中心";
center.classNumber = 10;
center.labNumber = 10;
System.out.println("\n***初始化成員變量后***");
center.showCenter()/看到什么效果莲镣?
}
}
編寫學(xué)員類,輸出學(xué)員相關(guān)信息
編寫教員類涎拉,輸出教員相關(guān)信息
> 一個景區(qū)根據(jù)游人的年齡收取不同價格的門票瑞侮。請編寫游人類,根據(jù)年齡段(10歲到60歲之間20元鼓拧,否則免費)決定能夠購買的門票價格并輸出
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
JourneyPerson journeyPerson = new JourneyPerson();
while (true)
{
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入姓名半火,輸入n退出程序");
//創(chuàng)建一個游人類
//將用戶輸入的姓名,賦值給游人對象journeyPerson的名字屬性
journeyPerson.name = scanner.next();
if(journeyPerson.name.equals("n"))//代表用戶想退出程序
{
// 退出程序
break;
}
//將用戶輸入的年齡季俩,賦值給游人對象journeyPerson的年齡屬性
System.out.println("請輸入年齡");
journeyPerson.age = scanner.nextInt();
//輸出該游人門票信息和個人信息showInfo
journeyPerson.showInfo();
}
System.out.println("退出程序");
}
}
···package com.company;
- Created by ttc on 17-12-25.
public class JourneyPerson {
String name;
int age;
public void showInfo()
{
String ticketInfo = "";
if(age < 10 || age > 60)
{
ticketInfo = "門票免費";
}
else
{
ticketInfo = "門票價格為:20元";
}
System.out.println(name + "的年齡為:"+ age + ticketInfo);
}
}
類的方法
電動玩具獅子
屬性:
顏色:黃色
行為:
跑
叫
定義類的方法
public 返回值類型 方法名() {
//這里編寫方法的主體
}
兩種情況
-
如果方法具有返回值钮糖,方法體中必須使用關(guān)鍵字return返回該值,返回值類型為該返回值的類型
return 表達式酌住;
作用: 跳出方法店归、返回結(jié)果
public class Student{
String name = "張三";
public String getName(){
return name;
}
//……
}
- 如果方法沒有返回值,返回值類型為void
public class Student{
String name = "張三";
public void getName(){
}
//……
}
> 方法是個“黑匣子”(不必關(guān)注其內(nèi)部如何實現(xiàn)功能)赂韵,完成某個特定的應(yīng)用程序功能娱节,并返回結(jié)果
>
> 香腸加工廠
方法調(diào)用:執(zhí)行方法中包含的語句
對象名.方法名();
public class AutoLion {
String color = "黃色"; //顏色
/*跑*/
public void run(){
System.out.println("正在以0.1米/秒的速度向前奔跑。");
}
/*叫*/
public String bark(){
String sound = "大聲吼叫" ;
return sound;
}
/*獲得顏色*/
public String getColor(){
return color;
}
/*顯示獅子特性*/
public String showLion(){
return "這是一個" + getColor() + "的玩具獅子!";
}
}
調(diào)試觀察
public class TestLion {
public static void main(String[ ] args) {
AutoLion lion = new AutoLion();
System.out.println(lion.showLion());
lion.run();
System.out.println(lion.bark());
}
}
方法之間允許相互調(diào)用祭示,不需要知道方法的具體實現(xiàn)肄满,實現(xiàn)重用谴古,提高效率
常見錯誤
public class Student1 {
public void showInfo() {
return "我是一名學(xué)生";
}
}
方法的返回值類型為void,方法中不能有return 返回值稠歉!
public class Student2 {
public double getInfo() {
double weight = 95.5;
double height = 1.69;
return weight, height;
}
}
方法不能返回多個值掰担!
public class Student3 {
public String showInfo() {
public double getInfo() {
double weight = 95.5;
double height = 1.69;
return weight;
}
return "我是一名學(xué)生";
}
}
多個方法不能相互嵌套定義!
public class Student4 {
int age = 20;
if(age < 20) {
System.out.println("年齡不符合入學(xué)要求怒炸!");
}
public void showInfo() {
return "我是一名學(xué)生";
}
}
不能在方法外部直接寫程序邏輯代碼带饱!
模擬骰子
public class Dice {
int[] value = new int[6];
//初始化
public void init()
{
for(int i = 0; i < 6; i++)
{
value[i] = i+1;
}
}
//拋骰子
public int throwDice()
{
//生成一個隨機數(shù)組下標(biāo)[0-6)之間的數(shù)
int index = (int)(Math.random()*6);
return value[index];
}
}
測試類
package com.company;
/**
* Created by ttc on 17-12-22.
*/
public class TestDice {
// 復(fù)用..
public static void main(String[] args) {
//用來計數(shù)1-6之間的數(shù)一共出現(xiàn)了幾次的一個數(shù)組
int[] count = new int[7];
Dice dice = new Dice();//創(chuàng)建 一個骰子對象(6個面都是0)
dice.init();//初始化骰子對象,把6個面都賦上值
//模擬拋600000次骰子
for(int i = 0; i < 60; i++)
{
int num = dice.throwDice();//本次骰子的點數(shù)(1-6)之間的數(shù)
//把點數(shù)作為下標(biāo)阅羹,代入到count數(shù)組中勺疼,將count[num]對應(yīng)的值+1(記錄num出現(xiàn)的次數(shù))
// count[num]當(dāng)前的值,保存著num已經(jīng)出現(xiàn)了多少次這個信息
count[num]++;
// System.out.println(num);
}
//最終對count數(shù)組遍歷捏鱼,
for(int i = 1; i < count.length; i++)
{
//count[i]里保存著i出現(xiàn)了多少次
System.out.println(i+"出現(xiàn)了" +count[i]+"次");
}
}
}
> 從鍵盤接收三門課分數(shù)执庐,計算三門課的平均分和總成績,編寫成績計算類實現(xiàn)功能
創(chuàng)建類 ScoreCalc
編寫方法實現(xiàn)各功能
編寫測試類
變量的作用域
變量聲明的位置決定變量作用域
變量作用域確定可在程序中按變量名訪問該變量的區(qū)域
//…
for(int a = 0; a < 4; a++) {
System.out.println ("hello" );
}
System.out.println ( a );
//…
成員變量和局部變量
誰能使用這些變量?
作用域不同
局部變量的作用域僅限于定義它的方法
成員變量的作用域在整個類內(nèi)部都是可見的
初始值不同
Java會給成員變量一個初始值
Java不會給局部變量賦予初始值
> 在同一個方法中导梆,不允許有同名局部變量,在不同的方法中轨淌,可以有同名局部變量
> 在同一個類中,成員變量和局部變量同名時看尼,局部變量具有更高的優(yōu)先級
public class Test {
int score1 = 88;
int score2 = 98;
public void calcAvg() {
int avg = (score1 + score2)/2;
}
public void showAvg(){
System.out.println("平均分是: " + avg);
}
}
局部變量avg的作用域僅限于calcAvg()方法
面向?qū)ο缶幊?/h3>
> 輸入三門課的成績递鹉,計算并打印平均成績和總成績
public static void main(String[ ] args) {
Scanner input = new Scanner(System.in);
System.out.print("請輸入Java成績:");
int java = input.nextInt();
//……
/*計算并顯示輸出*/
int total = java + c + db;
double avg = total / 3;
System.out.print("總成績:" + total);
System.out.print("\n平均分: " + avg);
}
ScoreCalc類 和 Test類
</pre>