Java自学 --换车重启8


this

使用细节

  • this 关键字可以用来访问本类的属性、方法、构造器
  • this 用于区分当前类的属性和局部变量
  • 访问成员方法的语法:this.方法名(参数列表)
  • 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一 条语句)
  • this 不能在类定义的外部使用,只能在类定义的方法中使用。

本章作业(日后一定要回看,作业里有不理解的地方)

​ 这一章有十多个作业,大多是回顾的,虽然都自己先做一遍然后在听老师讲,不过实现代码的方式都不太一样,不知道是我没读懂题目还是本身就有多个解法。记录一道石头剪刀布

package com.exception;

import java.util.Scanner;
public class Test04 {
    public static void main(String[] args){
        Tom tt = new Tom();
        Scanner sca = new Scanner(System.in);
        int score = 0 ;
        while (true){
            System.out.println("请按数字键出招:0石头,1剪刀,2布(其他任意键退出游戏)");
            int attack = sca.nextInt();
            if(attack == 0 || attack ==1 || attack ==2){
                score += tt.fingerGuess(attack);
            }else{
                System.out.println("总共赢了" + score + "次");
                System.out.println(attack + "退出游戏");
                return;
            }
        }

    }
}

class Tom{
    int defense;
    public int fingerGuess(int attack){
        switch (attack){
            case 0:
                System.out.println("你使用了---石头!");
                break;
            case 1:
                System.out.println("你使用了---剪刀!");
                break;
            case 2:
                System.out.println("你使用了---布!");
                break;
        }
        defense = (int)(Math.random()*3);
        switch (defense){
            case 0:
                System.out.println("电脑使用了-石头!");
                break;
            case 1:
                System.out.println("电脑使用了-剪刀!");
                break;
            case 2:
                System.out.println("电脑使用了-布!");
                break;
        }
        if(attack - defense == 0){
            System.out.println("平局");
            return 0;
        }else if(attack - defense == -1 || attack - defense == 2){
            System.out.println("你赢了!");
            return 1;
        }else{
            System.out.println("你输了!");
            return 0;
        }
    }
}

老师的方法和我的有点不一样,老师是通过判断石头剪刀布 ,三种出法,能赢的三种情况 ,然后剩下的平局,然后就是输来做思路,而我是统计了0 1 2之间的差数来确定输赢

//老师使用的一种没见过的随机数方法
Random r = new Random()int a = r.nextInt(3);  //0 1 2中的一个随机数

IDEA 快捷键

  • Ctrl + Alt + L 快速格式化代码
  • 快速运行 Alt + R
  • 导入该行需要的类 Alt + Enter
  • Ctrl + d 复制当前行
  • Alt + d 删除当前行
  • Alt + / 补全代码
  • Alt + Insert 生产构造器
  • Ctrl + H 查看一个类的层级关系
  • Ctrl +B 可以快速定位方法的位置
  • .var 自动分配变量名

自己添加模版 Settings - Editor - Live Templates - Java " + "


​ 包的本质就是文件夹,用于区分不同项目。

​ 只能包含数字、字母、下划线、小圆点 ( . ),但不能用数字开头,不能是关键字或者保留字。

​ 规范 com.公司名.项目名.业务模块

一个包下,包含很多的类,java 中常用的包有:
//1) java.lang.*   --lang 包是基本包,默认引入,不需要再引入
//2) java.util.*   --util 包,系统提供的工具包, 工具类,使用 Scanner 
//3) java.net.*    --网络包,网络开发 
//4) java.awt.*    --是做 java 的界面开发,GUI

​ package 的作用是声明当前类所在的包,需要放在类(或者文件)的最上面, 一个类中最多只有一句 package

​ import 指令 位置放在 package 的下面,在类定义前面,可以有多句且没有顺序要求


访问修饰符

​ java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

  • 公开级别:用 public 修饰,对外公开
  • 受保护级别:用 protected 修饰,对子类和同一个包中的类公开
  • 默认级别:没有修饰符号,向同一个包的类公开.
  • 私有级别:用 private 修饰,只有类本身可以访问,不对外公开
访问控制修饰符同类同包子类不同包
1public
2protectedX
3没有修饰符XX
4privateXXX

注意事项:

  • 修饰符可以用来修饰类中的属性 ,成员方法以及类
  • 只有默认的和public才能修饰类,并遵循表格的访问权限特点
  • 成员方法的访问规则和属性完全一样

封装 (重要)

​ 封装(encapsulation) 就是把抽象出的数据[属性] 和对数据的操作[方法] 封装在一起, 数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。同样适用Alt + Insert快捷键

封装的好处:

  • 隐藏实现细节:方法(连接数据库)<–调用(传入参数…)
  • 可以对数据进行验证,保证安全合理

封装的实现步骤(三步):

  • 将属性进行私有化private【不能直接修改属性】
  • 提供一个公共的(public) set方法, 用于对属性判断并赋值
  • 提供一个公共的(public) get方法, 用于获取属性的值
public void set Xxx(类型参数名){ //Xxx表示某个属性
    //加入数据验证的业务逻辑
	属性=参数名;       
}    
public数据类型get Xxx() {//权限判断, Xxx某个属性
	return xx;
}    

将构造器和 setXxx 结合

​ 把setXxx方法写进有参构造器内,防止通过构造器传参修改。


课堂练习

创建程序,在其中定义两个类:Account 和 AccountTest 类体会 Java 的封装性。

Account 类要求具有属性:姓名(长度为 2 位 3 位或 4 位)、余额(必须>20)、

密码(必须是六位), 如果不满足,则给出提示信息,并给默认值(程序员自己定)

通过 setXxx 的方法给 Account 的属性赋值。

在 AccountTest 中测试

public class Account {
    private String name;
    private double money;
    private String password;

    public Account() {
    }

    public Account(String name, double money, String password) {
        this.setName(name);
        this.setMoney(money);
        this.setPassword(password);
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {

        if(name.length() == 2 || name.length() == 3
                || name.length() == 3) {
            this.name = name;
        }else{
            System.out.println("输入姓名有误,长度应在2-4之间,设为 默认值张三");
            this.name = "张三";
        }
    }


    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        if(money > 20){
            this.money = money;
        }else{
            System.out.println("输入余额错误,余额应大于20,设为 默认值8.8888");
            this.money = 8.8888;
        }
    }


    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        if(password.length() == 6){
            this.password = password;
        }else{
            System.out.println("输入密码有误,请输入六位密码,设为默认000000");
            this.password = "000000";
        }
    }
    public void info(){
        System.out.println("name=" + name + "\tmoney=" + money
                + "\tpassword=" + password);
    }
}
public class AccountTest {
    public static void main(String[] args) {
        Account account = new Account();
        account.setName("哈哈哈");
        account.setMoney(333);
        account.setPassword("333333");
        account.info();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值