6,学习类和对象

对象的属性和方法:


image.png

image.png

类是模子,定义对象将会拥有的特征(属性)和行为(方法)
类是对象的类型,不同于int类型:具有方法


image.png
  • 类的定义方法:
public class  类名 {
        //定义属性部分
        属性1的类型 属性1;
        属性2的类型 属性2;
      …
        属性n的类型 属性n;
        //定义方法部分
        方法1;
        方法2;
        …
        方法m;
}

使用对象的步骤

  • 创建对象

类名 对象名 = new 类名();

School center = new School();
  • 引用类的属性:对象名.属性
  • 引用类的方法:对象名.方法名()
center.name = "北京中心";    //给name属性赋值
center.showCenter();         //调用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("退出程序");

    }
}

定义类的方法

  • 如果方法具有返回值,方法体中必须使用关键字return返回该值,返回值类型为该返回值的类型
    return 表达式;
    作用: 跳出方法、返回结果
public class Student{
    String name = "张三";
    public String  getName(){
            return name;
    }
   //……
}
  • 如果方法没有返回值,返回值类型为void


    image.png

方法调用

对象名.方法名();

方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率


image.png

常见错误

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 "我是一名学生";
    }
}

不能在方法外部直接写程序逻辑代码!

练习:计算骰子每面出现的次数

package com.company;

import java.util.Random;

/**
 * Created by Think on 2018/6/3.
 */
public class DiceDemo {

    int[] dice = new int[6];
    Random random = new Random();

    public void initial(){
        for (int i = 0; i < 6; i++)
        {
            dice[i] = i + 1;
        }
    }

    public int throwDice(){
        int index = random.nextInt(6);
        return dice[index];
    }
}
package com.company;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Created by Think on 2018/6/2.
 */
public class Test {
    public static void main(String[] args) {

        int[] count = new int[7];

        DiceDemo diceDemo = new DiceDemo();
        diceDemo.initial();
        for (int i = 0; i < 6000; i++)
        {
            int x = diceDemo.throwDice();
            count[x]++;
        }
        for (int i = 1; i < count.length; i++)
        {
            System.out.println("数字"+ i + "出现了" + count[i] + "次");
        }
    }
}
运行结果:
数字1出现了1014次
数字2出现了955次
数字3出现了992次
数字4出现了965次
数字5出现了1065次
数字6出现了1009次

成员变量和局部变量

image.png

作用域不同
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
初始值不同
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()方法


作者:豆约翰
链接:https://www.jianshu.com/p/3bacbcb9bdec
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容