共计 5047 个字符,预计需要花费 13 分钟才能阅读完成。
配套视频教程
本文 B 站配套视频教程
万物皆对象
分类是人们意识世界的一个很天然的过程,在日常生活中会不盲目地进行分类
身边的对象
顾客
姓名—张浩
年龄—20
体重—60kg
操作:
购买商品
收银员
员工号—10001
姓名—李明
部门—财务部
操作:
收款
打印账单
对象的特色——属性
属性——对象具备的各种特色
每个对象的每个属性都领有特定值
例如:张浩和李明的年龄、姓名不一样
对象的特色——办法(操作,行为)
办法——对象执行的操作(通常会扭转属性的值)
对象:用来形容客观事物的一个实体,由一组属性和办法形成
例子
属性:
品牌:法拉利
型号:F360 Spider
色彩:黄色
价格:380 万元
办法:
动员
进行
减速
属性:
色彩:红色
办法:
叫
跑
吃
对象同时具备属性和办法两项个性
对象的属性和办法通常被封装在一起,独特体现事物的个性,二者相辅相承,不能宰割
说一说教室里的对象
形容他们的属性和办法
从对象形象出“类”
抽取出下列对象的独特特色(属性和办法)
类是模子,定义对象将会领有的特色(属性)和行为(办法)
类是对象的类型
不同于 int 类型:具备办法
- 类是形象的概念,仅仅是模板
比如说:“人”
- 对象是一个你可能看失去、摸得着的具体实体
赵本山,刘德华,赵丽颖
所有 Java 程序都以类 class 为组织单元
关键字 class 定义自定义的数据类型
public class 类名 {
// 定义属性局部
属性 1 的类型 属性 1;
属性 2 的类型 属性 2;
…
属性 n 的类型 属性 n;
// 定义方法局部
办法 1;
办法 2;
…
办法 m;
}
定义一个类的步骤
- 定义类名
- 编写类的属性
- 编写类的办法
在不同城市的培训中心,会感触到雷同的环境和教学气氛,用类的思维输入核心信息
public class School {
String schoolName; // 核心名称
int classNumber; // 教室数目
int labNumber; // 机房数目
public void showCenter() {
System.out.println(schoolName + "培训学员 \n" + "装备:"
+ classNumber + "教" + labNumber + "机");
}
}
应用对象的步骤
创建对象
类名 对象名 = new 类名();
School center = new School();
援用对象成员:应用“.”进行以下操作
援用类的属性:对象名. 属性
援用类的办法:对象名. 办法名()
center.name = "北京核心"; // 给 name 属性赋值
center.showCenter(); // 调用 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()/ 看到什么成果?}
}
编写学员类,输入学员相干信息
编写教师类,输入教师相干信息
一个景区依据游人的年龄收取不同价格的门票。请编写游人类,依据年龄段 (10 岁到 60 岁之间 20 元,否则收费) 决定可能购买的门票价格并输入
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);
}
}
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 退出程序");
// 创立一个游人类
// 将用户输出的姓名,赋值给游人对象 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("退出程序");
}
}
类的办法
电动玩具狮子
属性:
色彩:黄色
行为:
跑
叫
定义类的办法
public 返回值类型 办法名() {
// 这里编写办法的主体
}
两种状况
- 如果办法具备返回值,办法体中必须应用关键字 return 返回该值,返回值类型为该返回值的类型
return 表达式;
作用:跳出办法、返回后果
public class Student{
String name = "张三";
public String getName(){return name;}
//……
}
- 如果办法没有返回值,返回值类型为 void
public class Student{
String name = "张三";
public void getName(){}
//……
}
办法是个“黑匣子”(不用关注其外部如何实现性能),实现某个特定的应用程序性能,并返回后果
香肠加工厂
办法调用:执行办法中蕴含的语句
对象名. 办法名();
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() + "的玩具狮子!";
}
}
调试察看
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());
}
}
办法之间容许互相调用,不须要晓得办法的具体实现,实现重用,提高效率
常见谬误
public class Student1 {public void showInfo() {return "我是一名学生";}
}
办法的返回值类型为 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 "我是一名学生";
}
}
多个办法不能互相嵌套定义!
public class Student4 {
int age = 20;
if(age < 20) {System.out.println("年龄不合乎退学要求!");
}
public void showInfo() {return "我是一名学生";}
}
不能在办法内部间接写程序逻辑代码!
模仿骰子
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()
{// 生成一个随机数组下标 [0-6) 之间的数
int index = (int)(Math.random()*6);
return value[index];
}
}
测试类
package com.company;
/**
* Created by ttc on 17-12-22.
*/
public class TestDice {
// 复用..
public static void main(String[] args) {
// 用来计数 1 - 6 之间的数一共呈现了几次的一个数组
int[] count = new int[7];
Dice dice = new Dice();// 创立 一个骰子对象(6 个面都是 0)dice.init();// 初始化骰子对象,把 6 个面都赋上值
// 模仿抛 600000 次骰子
for(int i = 0; i < 60; i++)
{int num = dice.throwDice();// 本次骰子的点数(1-6)之间的数
// 把点数作为下标,代入到 count 数组中,将 count[num]对应的值 +1(记录 num 呈现的次数)// count[num]以后的值,保留着 num 曾经呈现了多少次这个信息
count[num]++;
// System.out.println(num);
}
// 最终对 count 数组遍历,for(int i = 1; i < count.length; i++)
{//count[i]里保留着 i 呈现了多少次
System.out.println(i+"呈现了" +count[i]+"次");
}
}
}
从键盘接管三门课分数,计算三门课的平均分和总成绩,编写问题计算类实现性能
- 创立类 ScoreCalc
- 编写办法实现各性能
- 编写测试类
变量的作用域
变量申明的地位决定变量作用域
变量作用域确定可在程序中按变量名拜访该变量的区域
//…
for(int a = 0; a < 4; a++) {System.out.println ("hello");
}
System.out.println (a);
//…
成员变量和局部变量
谁能应用这些变量?
作用域不同
局部变量的作用域仅限于定义它的办法
成员变量的作用域在整个类外部都是可见的
初始值不同
Java 会给成员变量一个初始值
Java 不会给局部变量赋予初始值
在同一个办法中,不容许有同名局部变量, 在不同的办法中,能够有同名局部变量
在同一个类中,成员变量和局部变量同名时,局部变量具备更高的优先级
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()办法
面向对象编程
输出三门课的问题,计算并打印均匀问题和总成绩
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 类