JAVA语法解析
这是一个猜数字的游戏,依据输入的数据提示大小,最终确定正确的数字。
System.out.println(“执行0”);//后台打印,多用于检查调试
LOGGER.debug(“the real number is \u001b[38;5;6m[{}]\u001b[m”, realNumber);//多用于代码检查
目录结构
Controller-TrainingController.java代码解析
package com.icetai.portal.flow.training.controllers; //在java文件夹下,controlle文件r所在位置(固定写法)
import com.icetai.portal.flow.training.model.GuestNumber;//引入工具类,,路径+引入的model名(固定写法),GuestNumber会在post接口中用到
import com.icetai.portal.flow.training.model.GuestResult;
import com.icetai.portal.flow.training.model.GuestStorage;
import org.slf4j.Logger;//引入libraries库工具,Maven通用类库,工具名+功能
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/guest")//接口名称,调用地址:http://localhost:8080/guest
public class TrainingController {//公共类,与文件名一致,文件命名采用驼峰式写法
private static final Logger LOGGER = LoggerFactory.getLogger(TrainingController.class);
private static final String GREATER_THAN = "输入的数字太大了";
private static final String LESS_THAN = "输入的数字太小了"; //定义静态变量,final最终赋值。
@PostMapping//建立post接口,对应的还有@GetMapping
public @ResponseBody GuestResult result(@RequestBody GuestNumber guest) {//由构造函数GuestResult 来处理接受的参数,此外通过GuestNumber实例化并把地址传给 guest 相当于guest= new GuestNumber()
int fillIn = guest.getNumber2();//调用实例化后的guest(GuestNumber类)里的getNumber2()
int code = check(fillIn);//调用自由方法
if (code > 0) {
return new GuestResult(fillIn, GREATER_THAN);//调用model下的class GuestResult 的public GuestResult方法
} else if(code < 0) {
return new GuestResult(fillIn, LESS_THAN);
} else {
GuestStorage.getSingleton().refresh();//刷新标准值,在内存中调用GuestStorage,需要instance实例化
return new GuestResult(fillIn, "You win");
}
}
// todo://
private int check(int number) {
GuestStorage storage = GuestStorage.getSingleton();//类名 名称,表示stroage为GuestStorage类型,相当与GuestStorage=new GuestStorage() 和storage =GuestStorage,返回内存地址,对应下面代码2
int realNumber = storage.getTemp();
LOGGER.debug("the real number is \u001b[38;5;6m[{}]\u001b[m", realNumber);
return Integer.compare(number, realNumber);
}
}
model-GuestResult.java代码解析
package com.icetai.portal.flow.training.model;
public class GuestResult {
private int number;//定义自有变量this.
private String msg;
public GuestResult(int number) {//定义构造方法,构造函数名称必须与类名(或文件名)一致,对象初始化new时即执行
this.number = number;//自由变量赋值
}
public GuestResult(int number, String msg) {//new依据参数的数量选择执行不同的构造函数
this.number = number;
this.msg = msg;
}
public int getNumber() { //int表示返回值为int型,若无返回值则写void
return number;
}
public void setNumber(int number) {//定义方法标签,需要调用才执行
this.number = number;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
model-GuestStorage.java代码解析
package com.icetai.portal.flow.training.model;
import com.icetai.portal.flow.training.util.RandomUtil;
public class GuestStorage {
private int temp;
private static GuestStorage instance;//static表示加载GuestStorage类时即实例化GuestStorage =new GuestStorage (),同时对外暴露GuestStorage,即在内存中保留唯一地址,调用多次返回同一个对象,对应2
private GuestStorage(int num) {
this.temp = num;
}
public static GuestStorage getSingleton() {//static 表示无需实例化new即可调用
if (instance == null) {
synchronized (GuestStorage.class) {//synchronized 同步
if (instance == null) {
instance = new GuestStorage(RandomUtil.generateRandomNum());
}
}
}
return instance;//返回GuestStorage内存地址,实现链式操作,如GuestStorage.getSingleton().refresh();
}
public void refresh() {//void 表示该方法无返回值
this.temp = RandomUtil.generateRandomNum();
}
public int getTemp() {
return temp;
}
}
model-GuestResult.java代码解析
package com.icetai.portal.flow.training.model;
public class GuestResult {
private int number;
private String msg;
public GuestResult(int number, String msg) {
this.number = number;
this.msg = msg;
System.out.println("执行0");
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
接口调试
利用postman测试接口,接口地址为:localhost:8080/guest,post方法,传输对象{“number”:1,“number2”:2}