关于java:Java零基础系列教程06Java初识类和对象

32次阅读

共计 5047 个字符,预计需要花费 13 分钟才能阅读完成。

配套视频教程

本文 B 站配套视频教程

万物皆对象

分类是人们意识世界的一个很天然的过程,在日常生活中会不盲目地进行分类

身边的对象

顾客

姓名—张浩
年龄—20
体重—60kg

操作:
购买商品

收银员

员工号—10001
姓名—李明
部门—财务部

操作:
收款
打印账单

对象的特色——属性

属性——对象具备的各种特色
每个对象的每个属性都领有特定值
例如:张浩和李明的年龄、姓名不一样

对象的特色——办法(操作,行为)

办法——对象执行的操作(通常会扭转属性的值)

对象:用来形容客观事物的一个实体,由一组属性和办法形成

例子


属性:
品牌:法拉利
型号:F360 Spider
色彩:黄色
价格:380 万元
办法:
动员
进行
减速

属性:
色彩:红色
办法:


对象同时具备属性和办法两项个性
对象的属性和办法通常被封装在一起,独特体现事物的个性,二者相辅相承,不能宰割

说一说教室里的对象
形容他们的属性和办法

从对象形象出“类”

抽取出下列对象的独特特色(属性和办法)

类是模子,定义对象将会领有的特色(属性)和行为(办法)

类是对象的类型
不同于 int 类型:具备办法

  • 类是形象的概念,仅仅是模板

比如说:“人”

  • 对象是一个你可能看失去、摸得着的具体实体

赵本山,刘德华,赵丽颖

所有 Java 程序都以类 class 为组织单元

关键字 class 定义自定义的数据类型

public class  类名 {
        // 定义属性局部
        属性 1 的类型 属性 1;
        属性 2 的类型 属性 2;
      …
        属性 n 的类型 属性 n;
        // 定义方法局部
        办法 1;
        办法 2;
        …
        办法 m;
}

定义一个类的步骤

  1. 定义类名
  2. 编写类的属性
  3. 编写类的办法

在不同城市的培训中心,会感触到雷同的环境和教学气氛,用类的思维输入核心信息

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]+"次");
        }

    }

}

从键盘接管三门课分数,计算三门课的平均分和总成绩,编写问题计算类实现性能

  1. 创立类 ScoreCalc
  2. 编写办法实现各性能
  3. 编写测试类

变量的作用域

变量申明的地位决定变量作用域
变量作用域确定可在程序中按变量名拜访该变量的区域

//…
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 类

正文完
 0