面向对象:what when where why whom how
类与对象的关系:类是对象的抽象,对象是类的实现
类是由属性和方法构成,它的每一个对象都有对应的属性和方法
方法:
访问修饰符 返回值类型 方法名 参数列表 方法体 有返回值的要有return
方法的重载和重写:
重载:方法名相同,参数列表不同,与其他无关
同一个行为有多种表现形式,广泛定义的多态有可能包含重载(国内通常不这么认为)
目的:针对同一个行为的多种表现,对应相同方法名
类方法(static 方法)
类名.方法名() 静态变量,共享同一个内存地址
封装:
保护属性值不被随意修改,特殊的值不能被赋的时候,注释又不能解决问题的时候,可以在get里加限制
私有化属性,并提供getter,setter对外接口
继承:
代码重用、是多态的基础
extends关键字
默认的根类是Object,单根继承,tostring equls hashcode
方法的重写:
有继承关系
方法名相同,参数列表相同,返回值相同或小于父类
访问修饰符不能小于父类,异常不能严于父类
构造方法
默认的构造方法都会先走父类无参构造方法,要构建对象这个能力,理解为只有object类有,其他人都没有
用super指定的构造方法,调用指定的构造方法前,参照第一条
多态:
以父类做参数类型的
父类中的方法如果被子类重写,那么在使用父类类型调用该方法时,
则看具体的子类类型,决定调用的是那个重写后的方法
以父类做返回值类型的
如果只调用父类方法则没有问题
如果需要调用子类特有方法,则需要向下强制转型
抽象类和接口:
abstract关键字:定义抽象类和抽象方法
interface关键字:定义接口
implements关键字:实现接口
抽象类和接口的异同点:
都不能被实例化,都可以有抽象方法
接口的所有方法都默认是:public abstract类型
接口的所有属性都默认是:public static final类型
抽象类用来被继承,主要的目的是代码重用,只能继承一个类
接口用来扩展功能,可以实现多个接口
异常:
异常的分类:throwable–>error、Exception
Exception–>checked异常、运行期异常(RuntimeException)
异常的处理:
try{有可能产生异常的代码}
catch(有可能的异常类型 e){打印堆栈/打印异常信息…}
finally{最终块、往往用于关闭资源}
异常类的定义:
自定义异常类,继承已知的异常类
写出有参构造方法,并用super调用父类的有参构造
玩家:级别、当前级别时间、姓名、得分,玩游戏()
级别:字符数、得分、次数、规定时间、级别号
6个级别的常量:
游戏类:玩家,生成字符(),玩游戏()
当前时间:System.currentTimeMillis();
流程控制:
欢迎
循环(当前级别的显示次数)
如果循环正常走完,升级
打印字符串
级别编号、时间初始化为当前时间、已用时间初始化为0
输出错误
超时
Game:
package cn.kgc.kb09;
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/27 15:05
* @Description:
**/
public class Game implements LevelParams {
//生成一串字符
Player player=new Player("Sam");
public String getStrings(){
int curLvl=player.getCurLevel();
Level lvl=LEVELS[curLvl-1];
String str="";
for (int i = 0; i < lvl.getCharCnt(); i++) {
int ranNum=(int)(Math.random()*10);
str+=ranNum;
}
return str;
}
//流程控制
public void run(){
Scanner sc=new Scanner(System.in);
System.out.println("欢迎"+player.getName()+"来到puickHit峡谷!!");
while(player.getCurLevel()<=6){
int lvlNum=player.getCurLevel();
Level lvl=LEVELS[lvlNum-1];
for (int i = 1; i <= lvl.getInputNum(); i++) {
System.out.println("当前级别为"+player.getCurLevel()+"积分为:"
+player.getCurScore()+"已用时间:"+player.getUsedTime()/1000);
String out=getStrings();
System.out.println(out);
System.out.println("请输入对应的字符串:");
String input=sc.next();
long now=System.currentTimeMillis();
player.setUsedTime(now-player.getStartTime());
if(!input.equals(out)){
System.out.println("输入错误,游戏结束");
System.exit(-1);
}else if(player.getUsedTime()/1000>lvl.getLimitTime()){
System.out.println("输入超时,游戏结束");
System.exit(-1);
}
//输入正确且未超时的情况
player.setCurScore(player.getCurScore()+lvl.getPerScore());//加分
}
player.setCurLevel(player.getCurLevel()+1);
player.setUsedTime(0);
player.setStartTime(System.currentTimeMillis());
}
}
}
Level:
package cn.kgc.kb09;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/27 15:05
* @Description:
**/
public class Level {
private int lvNum;//级别号
private int charCnt;//当前级别每次输出的字符数
private int perScore;//每次输入后的正确得分
private long limitTime;//当前级别规定时间
private int inputNum;//输入次数
public Level(int lvNum, int charCnt, int perScore, long limitTime, int inputNum) {
this.lvNum = lvNum;
this.charCnt = charCnt;
this.perScore = perScore;
this.limitTime = limitTime;
this.inputNum = inputNum;
}
public int getLvNum() {
return lvNum;
}
public int getCharCnt() {
return charCnt;
}
public int getPerScore() {
return perScore;
}
public long getLimitTime() {
return limitTime;
}
public int getInputNum() {
return inputNum;
}
}
LevelParams:
package cn.kgc.kb09;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/27 15:12
* @Description:
**/
public interface LevelParams {
Level[] LEVELS={
new Level(1,2,3,20,5),
new Level(2,3,5,40,8),
new Level(3,4,7,60,10),
new Level(4,5,8,55,8),
new Level(5,6,9,50,6),
new Level(6,7,10,40,4),
};
}
Player
package cn.kgc.kb09;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/27 15:05
* @Description:
**/
public class Player {
private String name;
private int curLevel=1;//当前级别编号
private int curScore;//当前得分
private long startTime=System.currentTimeMillis();//开始时间
private long usedTime;//使用时间
public Player(String name) {
this.name = name;
}
void play(){
Game game = new Game();
game.player=this;
game.run();
System.out.println("恭喜"+name+",您已通关!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCurLevel() {
return curLevel;
}
public void setCurLevel(int curLevel) {
this.curLevel = curLevel;
}
public int getCurScore() {
return curScore;
}
public void setCurScore(int curScore) {
this.curScore = curScore;
}
public long getStartTime() {
return startTime;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
public long getUsedTime() {
return usedTime;
}
public void setUsedTime(long usedTime) {
this.usedTime = usedTime;
}
}
Test:
package cn.kgc.kb09;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/27 16:17
* @Description:
**/
public class Test {
public static void main(String[] args) {
Player p=new Player("Sam");
p.play();
}
}
vmware安装虚拟机Centos7:
https://blog.csdn.net/qq_33573996/article/details/107122084
在Linux环境下输入
vi /etc/sysconfig/network-scripts/ifcfg-ens33
如果输入错误 :q退出
按a变成insert模式,
将BOOTPROTO=dhcp改成static
ONBOOT=no改成yes
最后一行添加:
IPADDR=192.168.89.30
第三位数字可以通过win+R cmd
输入ipconfig
我这里就改成:IPADDR=192.168.237.30
按esc 然后输入:wq保存并退出
输入:
systemctl restart network 重启网络配置
systemctl stop firewalld 关闭防火墙
这个时候就可以,然后使用软件
MobaXterm_Portable_v12.3
链接:https://pan.baidu.com/s/1CQD23aadVD_FdfiDNGh5yA
提取码:8b7c
输入用户名和密码:
登陆成功!
ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
fg
将后台中的命令调至前台继续运行
将后台命令调至前台继续运行后,在使用, vim 退出命令即可。
:wq 保存并退出
:q! 不保存退出