首页 > 其他 > 详细

类与对象

时间:2021-01-05 15:15:41      阅读:22      评论:0      收藏:0      [点我收藏+]

1. 面向对象概述

java语言优势:

  • 封装
  • 继承
  • 多态

面向对象编程核心:

  1. 对象是什么?

  2. 如何创建对象?

面向对象编程(OOP):所有的功能实现都是基于对象,都是通过对象进行完成

2.类与对象

2.1 如何创建对象(Object)?

依靠class(类)进行实现:

? 一个类别class可以创建出来n个对象,每个对象都有唯一的class与之相对应

2.2类(class)的组成部分

多个对象的模板(对象共有的一些信息)

对于学生来说:学生编号 学生姓名 学生成绩 学习行为

成员变量
访问权限修饰符   普通修饰符   数据类型  变量名 = 数据;
创建对象( new )
类名   对象名(变量/实例/引用) = new 类名(); 
类名   对象名(变量/实例/引用) = new 构造方法; 
public class Student {
    //类的组成部分
    //成员变量(属性) 成员方法(行为)

    //成员变量
    public int stuId;
    public String stuName;
    public double stuScore;

    //成员方法
    public void Study(){
        System.out.println(stuName+"在学习....");
    }

    public static void main(String[] args) {
        Student meilin = new Student();
        System.out.println(meilin);
                meilin.Study();
    }
}

技术分享图片

2.3 对象功能------可以访问类的成员

   对象名.成员变量; 
   对象名.成员方法(); 
public class Student {
    //类的组成部分
    //成员变量(属性) 成员方法(行为)

    //成员变量
    //当加上static后 数据就成了共享的
    public int stuId;
    public String stuName;
    public double stuScore;

    //成员方法
    public void Study(){
        System.out.println(stuName+"在学习....");
    }

    public static void main(String[] args) {
        Student meiLin = new Student();
        System.out.println(meiLin);
        meiLin.Study();

        System.out.println("===========");

        Student chenRan = new Student();
        System.out.println(chenRan);
        chenRan.stuId = 1002;
        chenRan.stuName = "陈然";
        chenRan.stuScore = 100;
        System.out.println("学生的编号:"+chenRan.stuId);
        System.out.println("学生的姓名:"+chenRan.stuName);
        System.out.println("学生的成绩:"+chenRan.stuScore);
        chenRan.Study();

    }
}

技术分享图片

2.4 构造方法

作用:对成员变量初始化数据

类名   对象名(变量/实例/引用) = new 构造方法; 

创建对象其实是结合构造进行创建的。

在任意一个类里面,都默认存在一个无参的构造。如果写了有参构造的话,会把无参给覆盖掉。(就不能使用无参构造进行对象创建了)

2.5 成员变量和局部变量的区别

  1. 初始化:

    • 成员变量: 有默认值,无需初始化就能使用
    • 局部变量:必须进行初始化才能使用
  2. 作用域:

    • 成员变量:在整个类里面都可以访问
    • 局部变量:只在当前的方法体内有效
  3. 生命周期:

    • 成员变量: 与对象保持一致
    • 局部变量:
      • 基本数据类型: 方法运行完毕,栈内存数据清除
      • 引用数据类型:等待垃圾回收无用对象
  4. 内存:

    • 成员变量:在堆中
    • 局部变量:在栈中

封装

作用: 对数据(成员变量)的封装.

实现方式:

  1. 将成员变量访问权限修饰符改成private
    private:只能修饰成员变量和成员方法 。只能在本类里面直接访问。

  2. 提供对外的set(赋值)/get(获取)

  • public :
    可以修饰类 修饰成员
  • private:
    本类友好

开发中set/get方法不允许写任何逻辑

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String username;
    private String password;
    private int cardNo;
    private boolean isRegister;
    private boolean isLogin;
}
import java.util.Arrays;
import java.util.Scanner;

/**
 * @Packagename: 类与对象.lucky
 * @Classname: LuckyMain
 * @author: ChengGang
 * @Date: 2020/12/31 23:05
 * @version: IntelliJ IDEA 2020.3
 * JDK 11.0.7
 */
public class LuckyMain {
    private Scanner input;
    private User user;

    public void init() {
        //初始化成员变量
        input = new Scanner(System.in);
        user = new User();
    }


    public void start() {
        String answer;
        do {
            System.out.println("*********欢迎进入游客抽奖系统*************");
            System.out.println("\t\t\t 1. 注册");
            System.out.println("\t\t\t 2. 登录");
            System.out.println("\t\t\t 3. 抽奖");
            System.out.println("*********欢迎进入游客抽奖系统*************");

            System.out.println("请选择类型:");
            int choice = input.nextInt();
            switch (choice) {
                case 1:
                    //之前注册过,就不需要再注册
                    if (user.isRegister()) {
                        System.out.println("已经注册,无需继续注册");
                        break;
                    }
                    user = userRegister();
                    break;
                case 2:
                    user.setLogin(userLogin());
                    break;
                case 3:

                    lucky();
                    break;
                default:
                    System.out.println("录入错误,请重新录入");
            }
            System.out.println("是否继续 y/n");
            answer = input.next();
        } while ("y".equals(answer));
        System.out.println("程序退出...");
    }

    /**
     * 实现用户抽奖
     */
    private void lucky() {
        if (!user.isLogin()) {
            System.out.println("请先登录!");
            return;

        }
        System.out.println("3. 会员抽奖");
        while (true) {
            System.out.print("请输入会员卡号:");
            int cardNumber = input.nextInt();
            if (cardNumber == user.getCardNo()) {
                break;
            } else {
                System.out.println("卡号错误!请重新录入!");
            }
        }
        int[] luckyNum = new int[5];
        boolean isLucky = false;
        for (int i = 0; i < 5; i++) {
            luckyNum[i] = (int) (Math.random() * 9000 + 1000);
        }
        for (int num : luckyNum) {
            if (num == user.getCardNo()) {
                System.out.println("中奖卡号为:" + Arrays.toString(luckyNum));
                System.out.println("恭喜您中奖了......");
                isLucky = true;
                break;
            }
        }
        if (!isLucky) {
            System.out.println("中奖卡号为:" + Arrays.toString(luckyNum));
            System.out.println("抱歉您未中奖,下次继续努力");
        }


    }

    /**
     * 实现用户登录
     **/
    private boolean userLogin() {
        if (!user.isRegister()) {
            System.out.println("请先注册!");
            return false;
        }
        System.out.println("2. 会员登录");
        int count = 3;
        while (count >= 1) {
            System.out.print("请输入用户名:");
            String userName = input.next();
            System.out.print("请输入用户密码:");
            String password = input.next();
            if (!userName.equals(user.getUsername()) || !password.equals(user.getPassword())) {
                count--;
                if (count == 0) {
                    System.out.println("用户名或密码错误!登录失败!");
                    return false;
                }
                System.out.println("用户名或密码错误!登录失败!你还有" + count + "次输入机会");

            } else {
                System.out.println("登录成功");
                break;
            }
        }
        System.err.println("欢迎你" + user.getUsername());
        return true;

    }

    /**
     * 实现用户注册
     **/
    private User userRegister() {

        System.out.println("1. 注册");
        System.out.print("请输入用户名:");
        String userName = input.next();
        System.out.print("请输入用户密码:");
        String password = input.next();
        System.out.println("success!请牢记会员卡号");
        int cardNum = (int) (Math.random() * 9000 + 1000);
        System.out.println("用户名\t 密码\t 会员卡号");
        System.out.println(userName + "\t" + password + "\t" + cardNum);
        return new User(userName, password, cardNum, true, false);

    }
}
public class LuckyApp {
    public static void main(String[] args) {
        LuckyMain luckyMain = new LuckyMain();
        luckyMain.init();
        luckyMain.start();
    }
}

类与对象

原文:https://www.cnblogs.com/cgcnblog/p/14235021.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!