1、构造方法的格式是什么?有哪些注意事项?
权限修饰符 类名(参数类型 参数1,参数类型 参数2...){
一般初始化成员变量
}
分为有参构造和无参构造,
无参构造创建的对象,需要setter来设置值,通过getter来获取值
有参构造,可以通过构造方法直接给对象设置值,可以通过getter方法来获取值
2、构造方法可以重载吗?
里边可以有return语句吗?
可以(有参) 可以(return一般不写)
3、给成员变量赋值有几种方式?有什么区别?
两种 有参构造直接赋值和set方法给成员变量赋值。
get方法获取成员变量
使用set get赋值比较灵活。
4、static关键字有什么特点,使用的时候有什么注意事项?
1)随着类的加载而加载2)优先于对象存在3)被类的所有对象共享4)可以通过类名调用。
1)静态只能访问静态2)静态方法中没有关键字this。 3)非静态的既可以访问非静态,也可以访问静态的.(方法中)
5、class Person{
private String name = "战三";
}
public static void main(String[] args) {
Person p = new Person(); // name age
},这段代码在内存中做了哪些事情?
//首先主函数进栈 其中有Person 在堆中创建Person()然后给对象中属性初始化值。
1)主方法进栈
2)Person.class字节码文件进入方法区
3)在主方法中声明 Person p 这个引用
4)在堆内存中开辟空间 new Person()
5)给这个Person() 进行默认初始化 name = null
6)给这个Person对象进行显示初始化 name = 战三
7)把堆内存的地址值赋值给 主方法中这个Person p 这个引用
6、静态变量和成员变量的区别是什么?
他俩所属不同,
静态: 属于类
成员:属于对象
内存中的位置不同,
静态: 静态区
成员:堆
调用不同,
静态:既可以类名调用,也可以对象调用,推荐类名调用
成员:对象调用
内存出现的时间不同。
静态: 随着类的加载而加载,随着类的消失而消失
成员:随着对象的生成而生成,随着对象的消失而消失.
7、练习使用JDK提供的帮助文档配合第11题学习Random?
8、通过Math类如何获取1-100之间的随机数?
static double random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
由于是静态的可以通过类名调用方法:
1) double ran = Math.random(); 0.0000 - 0.9999...
2) int ranInt = (int)(ran*100) + 1 ; 1 - 100
int number = (int)(Math.random()*100)+1;
9、需求:定义一个长方形类,定义求周长和面积的方法,然后定义一个测试类进行测试。
class TestRectangle {
public static void main(String[] args) {
Rectangle r = new Rectangle(10,10); //创建对象并赋值
System.out.println(r.getArea() + "..." +r.getLength());
Rectangle r1 = new Rectangle();
r1.setWidth(20);
r1.setHigh(20);
System.out.println(r1.getArea() + "..." +r1.getLength());
}
/*
宽width 高high
面积 getArea
周长 getlength
*/
}
class Rectangle {
private int width; //宽
private int high; //高
public Rectangle() {} //无参
public Rectangle(int width,int high) { //有参
this.width = width;
this.high = high;
}
public void setWidth(int width) { //设置宽
this.width = width;
}
public int getWidth() { //获取宽
return width;
}
public void setHigh(int high) { //设置高
this.high = high;
}
public int getHigh() { //获取高
return high;
}
public int getArea() {
return width * high; //面积
}
public int getLength() {
return (width + high) * 2; //周长
}
}
10、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。
标准格式包含: 私有属性 无参构造 有参构造 setter 和getter 需求中的方法
需求一:
员工类Employee
属性:姓名name,工号id,工资salary
行为:显示所有成员信息的方法show()
class EmployeeTest {
public static void main(String[] args) {
Employee e = new Employee("腾腾","007",13000);
e.show();
}
}
class Employee {
private String name; //姓名
private String id; //id
private double salary; //工资
public Employee(){} //无参
public Employee(String name,String id,double salary){//有参
this.name = name;
this.id = id;
this.salary = salary;
}
public void setName(String name){ //设置姓名
this.name = name;
}
public String getName(){ //获取姓名
return name;
}
public void setId(String id){ //设置ID
this.id = id;
}
public String getId(){ //获取ID
return id;
}
public void setSalary(double salary){ //设置工资
this.salary = salary;
}
public double getSalary(){ //获取工资
return salary;
}
public void show(){
System.out.println("姓名:" + name + ",工号:" + id +",工资:" + salary );
}
}
需求二:
动物类Animal
属性:姓名name,年龄age
行为:吃饭eat,睡觉sleep
class testAnimal {
public static void main(String[] args){
Animal p = new Animal(); //创建对象
p.setName("小懒货");
p.setAge(2);
System.out.println(p.getName() + "..." + p.getAge());
p.eat();
p.sleep();
}
}
class Animal {
private String name; //名字
private int age; //年龄
public void setName(String name) { //设置名字
this.name = name;
}
public String getName() { //获取名字
return this.name;
}
public void setAge(int age) { //设置年龄
this.age = age;
}
public int getAge() { //获取年龄
return this.age;
}
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
需求三:
人类Person
属性:姓名name,年龄age,性别gender
行为:学习study,睡觉sleep
class TestPerson {
public static void main(String[] args) {
Person p = new Person("张三",23,"男");
System.out.println(p.getName() + "..." + p.getAge() + "..." + p.getGender());
p.study();
p.sleep();
}
}
class Person {
private String name;
private int age;
private String gender;
public Person(){} //无参
public Person(String name,int age,String gender){ //有参
this.name = name;
this.age = age;
this.gender = gender;
}
public void setName(String name){ //设置姓名
this.name = name;
}
public String getName(){ //获取姓名
return name;
}
public void setAge(int age){ //设置年龄
this.age = age;
}
public int getAge(){ //获取年龄
return age;
}
public void setGender(String gender){ //设置性别
this.gender = gender;
}
public String getGender(){ //获取性别
return gender;
}
public void study(){
System.out.println("学习");
}
public void sleep(){
System.out.println("睡觉");
}
}
11.使用Math类,完成猜数字小游戏(5次机会)
import java.util.*;
class Game {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数1到100");
int guessGame =(int)(Math.random() * 100 + 1) ;
for (int count = 0;count < 5 ;count++ ) {
while (true) {
int x = sc.nextInt();
if (x > guessGame) {
System.out.println("大了");
break;
}else if (x < guessGame) {
System.out.println("小了");
break;
}else {
System.out.println("中了");
break;
}
}
}
}
}
12.根据API帮助文档自学Random类完成13题:
13.设计一个点名器, 随机打印一个学生的名字
提示: 随机数组索引, 根据索引获取同学名称,建议使用Random类
import java.util.*;
/*
目的: 程序一执行,就随机控制台输入一个学生的名字
思路: 1.有一个容器数组(数组里面装的是学生名字的字符串)
2)使用Randonm类,创建一个随机数(随机数的范围是数组的长度) , 因为咱们要用生成的随机数作为数组的下标
3)根据下标找到对应的String 学生名字
4)打印这个学生的名字
*/
class Game {
public static void main(String[] args) {
//1.有一个容器数组(数组里面装的是学生名字的字符串)
String[] arr = {"阿大","阿二","阿三","阿四","阿五","阿六","阿七","阿八","阿九","阿十"};
// 2)使用Randonm类,创建一个随机数(随机数的范围是数组的长度) , 因为咱们要用生成的随机数作为数组的下标
int game = (int)(Math.random() * 10); // 0 - 9 随机数的范围 , game其实就是随机的索引
System.out.println(arr[game]); //通过随机索引找到这个数组的人名
String[] arr = {"阿大","阿二","阿三","阿四","阿五","阿六","阿七","阿八","阿九","阿十"};
System.out.println(arr[new Random(arr.length)]);
}
}
|
|