2021-04-06复习java基础
面向对象
一个对象的内存图:
两个对象使用同一个成员方法的内存图:
两个引用指向同一个对象的
使用对象类型作为方法的参
注意:
当一个对象作为参数,传递到方法当中时,实际上传递进去的是对象的地址值。
使用对象类型作为方法的返回值
注意:
当使用一个对象类型作为方法的返回值时:返回值其实就是对象的地址值。
局部变量和成员变量
- 定义的位置不一样【重点】: 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中
- 作用范围不一样【重点】: 局部变量:只有方法当中才可以使用,出了方法就不能再用成员变量:整个类全都可以通用。
- 默认值不一样【重点】 :局部变量:没有默认值,如果要想使用,必须手动进行赋值成员变量:如果没有赋值,会有默认值,规则和数组一样
- 内存的位置不一样(了解):局部变量:位于栈内存成员变量:位于堆内存
- 生命周期不一样(了解):尾部变量:随着方法进栈而诞生,随着方法出栈而消失成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
构造方法
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
格式:
pubLic类名称(参数类型参数名称){方法体
}
注意事项:
- 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
- 构造方法不要写返回值类型,连void都不写
- 构造方法不能return—个具体的返回值
- 如果没有编写任何构造方法,那么绢译器将会默认赠送一个构造方法,有参数、方法体什么事情都不做。public Student() {}
- —旦编写了至少一个构造方法,那么编译器将不再赠送。
- 构道万话也是可以进行驱载的。重载:方法名称相同,参数列表不同。
pubiic class Student {
private String name;
private int age;
public Student() {
System.out.print1n(“无参构造方法执行啦!");
}
public Student(String name, int age) {
System.out.print1n("全参构造方法执行啦!“);
this.name = name;
this.age = age;
}
get、set方法省略............
}
public static void main(String[] args){
Student st1 = new Student(); //会执行无参构造
student st2 = new Student("小张",18) //执行有参构造
}
API文档----scaner类
**Scanner类的功能:**可以实现键盘输入数据,到程序当中。
引用类型的一般使用步骤:
- 导包,import包路径.类名称;
如果需要使用的自标类,和当前类位于同一个包下,则可以省略导包语句不写。只有java.Lang包下的内容不需要导包,其他的包都需要import语句。 - 创建 类名称对象名= new类名称();
- 使用 对象名.成员方法名()
- 芜取键盘输入的一个int数字: int num = sc.nextInt();
- 获取键盘输入的一个字符串:String str = sc.next();
public static void main(String[]args) {
//2.创建
//备注:System.in代表从键盘进行输入
Scanner sc = new Scanner(System.in ) ;
System.out.println("请输入您想输入的数字:");
//3.获取键盘输入的int数字
int num = sc.nextInt();
System.out.print1n(“输入的int数字是:" + num) ;
System.out.println("请输入您想输入的字符串:");
//4.获取键盘输入的字符串
String str = sc.next();
System.out.println(“输入的字符串是:" + str);
}
Random类(生成随机数)
Random类用来生成随机数子。使用起来也是三个步骤:
- 导包 import java.util.Random;
- 创建 Random r = new Random(); /小括号当中留空即可
- 使用 获取一个随机的int数字(范围是int所有范围,有正负两种): int num = r.nextInt()
public static void main(String[]args) {
Random r = new Random( );
int num = r.nextInt();
System.out.println("随机数是:“ + num);
}
题目要求:
根据int变量n的值,来获取随机数字,范围是[1,n],可以取到1也可以取到n。
思路:
- 定义一个int变量n,随意赋值
- 要使用Random:三个步骤,导包、创建、使用
- 如果写10,那么就是0~ 9,然而想要的是1~10,可以发现:整体+1即可。
- 打印随机数字
public static void main(String[] args) {
int n = 5;
Random r = new Random();
for (int i = 0; i < 100; i++){
//本来范围是[e,n),整体+1之后变成了[1,n+1),也就是[1, n]
int result = r.nextInt(n) + 1;
System.out.println(result);
}
}
题目:
用代码模拟猜数字的小游戏。
思路:***
- 首先需要产生一个随机数字,并且一旦产生不再变化。用Random的nextInt方法
- 需要键盘输入,所以用到了Scanner
- 获取键盘输入的数字,用Scanner当中的nextInt方法
- 已经得到了两个数字,判断(if)一下:
- 如果太大了,提示太大,并且重试;
- 如果太小了,提示太小,并且重试;如果猜中了,游戏结束。
- 重试就是再来一次,循环次数不确定,用whiLe(true)
public static void main(String[] args) {
Random r = new Random( );
int randomNum = r.nextInt( bound: 100) + 1;// [1,100]
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print1n(“请输入你猜测的数字:.")3.....
int guessNum = sc.nextInt(); //键盘输入猜测的数字
if (guessNum > randomNum) {
System.out.println("太大了,请重试。");
}else if (guessNum < randomNum) {
System.out.println("太小了,请重试。");
}else {
System.out-print1n("恭喜你,猜中啦!");
break; //如果猜中,不再重试
}
}
System.out. println(“游戏结束。");
}
模拟猜数字游戏限制次数5次
采用for循环改版
public static void main(String[] args) {
Random rm = new Random();
int res = rm.nextInt(100)+1;
Scanner sc = new Scanner(System.in);
int num = 5;
for (int i = 1; i <= num; i++) {
System.out.println("请输入你的猜测的数字;");
int guess = sc.nextInt();
if(i==num){
System.out.println("很遗憾!次数用完,你还剩余"+(num-i)+"次机会");
System.out.println("正确答案是:"+res);
break;
}
if (guess>res){
System.out.println("您输入的数字太大,请重试,你还剩余"+(num-i)+"次机会");
}else if(guess<res) {
System.out.println("您输入的数字太小,请重试,你还剩余"+(num-i)+"次机会");
}else {
System.out.println("恭喜你猜中了,这是第"+i+"次");
break;
}
}
System.out.println("游戏结束啦");
}
运行结果如下
请输入你的猜测的数字;
12
您输入的数字太小,请重试,你还剩余4次机会
请输入你的猜测的数字;
50
您输入的数字太大,请重试,你还剩余3次机会
请输入你的猜测的数字;
40
您输入的数字太大,请重试,你还剩余2次机会
请输入你的猜测的数字;
30
您输入的数字太大,请重试,你还剩余1次机会
请输入你的猜测的数字;
25
很遗憾!次数用完,你还剩余0次机会
正确答案是:24
游戏结束啦
Process finished with exit code 0