1.构造方法
1.1构造方法的作用和格式
(1)作用:创建对象,给对象中的成员进行初始化。
(2)格式:
- 方法名与类名相同
- 没有返回值类型,连void都没有
- 没有具体的返回值
有参构造初始化:
public class MyTest {
public static void main(String[] args) {
//使用有参构造来实现对类的实例化
Star star = new Star("刘亦菲", 18);
System.out.println(star.getAge());
System.out.println(star.getName());
}
}
class Star{
//私有化成员变量
private String name;
private int age;
//提供有有参构造方法
public Star(String name,int age){
this.name=name;
this.age=age;
}
//提供get方法即可
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
1.2构造方法的注意事项
(1)如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
(2)如果我们给出了有参数构造方法,系统将不再提供默认的无参构造方法。
注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法。
给成员变量赋值的两种方法:setXxx()方法和构造方法。
1.3创建一个对象的步骤
Student s = new Student();
步骤:
(1):加载Student.class文件进内存
(2):在栈内存为s开辟空间
(3):在堆内存为学生对象开辟空间
(4):对学生对象的成员变量进行默认初始化
(5):对学生对象的成员变量进行显示初始化
(6):通过构造方法对学生对象的成员变量赋值
(7):学生对象初始化完毕,把对象地址赋值给s变量
2.static关键字
static 静态的,可以修饰成员变量,修饰变量,此变量为一个共享变量,被该类所有的对象所共享。
(1)static关键字的特点:
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享
- 可以通过类名调用,其实它本身也可以通过对象名调用
(2)static的注意事项: - 在静态方法中是没有this关键字的
原因:静态是随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在。 - 静态方法只能访问静态的成员变量和静态的成员方法
静态只能访问静态,非静态可以访问静态的也可以访问非静态的 - 静态方法里面不能存在this关键字,this代表一个对象,是后来才有的,静态方法里面访问不到。
2.1static关键字的例子
2.2静态变量和成员变量的区别
静态变量 | 成员变量 |
---|---|
随着类的加载而加载,随着类的卸载而卸载 | 随着对象的创建而产生,随着对象的消失俄而存在 |
属于类,也叫类变量,使用类名来调用,可以使用类调用,但是不推荐 | 属于对象,也叫实例变量,使用对象名来调用 |
静态变量存储于方法区的静态区,JDK1.7之后静态变量存储在堆内存中 | 成员变量存储于堆内存 |
静态变量可以通过类名调用,也可以通过对象调用,推荐使用类名调用 | 成员变量只能通过对象名调用 |
3Math类
(1)概述:类包含用于执行基本数学运算的方法
(2)特点:
- 由于Math类在java.lang包下,所以不需要导包
- 没有构造方法,因为它的成员全部是静态的
(3)获取随机数的方法:public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
(4)获取一个1-100之间的随机数
int number = (int)(Math.random()*100)+1;
3.1猜数字小游戏
class Game {
public static void main(String[] args) {
int random = (int)(Math.random()*100 + 1);
System.out.println("请猜这个数是什么:");
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
while(true) {
if (number > random) {
System.out.println("猜大了");
} else if (number < random) {
System.out.println("猜小了");
} else {
System.out.println("猜对了");
break;
}
number = sc.nextInt();
}
}
}