对象创建的步骤,内存图,已及构造方法
对象创建的步骤
假设创建了一个手机类phone的对象,那么它经历了那些步骤呢?如下所示:
phone t=new phone();
1.加载phone.class文件进入内存;
2.在栈内存为t开辟空间;
3.在堆内存为手机对象开辟空间;
4.对手机对象的成员变量进行默认初始化;
5.对手机对象的成员变量进行显示初始化;
6.通过构造方法对手机对象的成员变量赋值;
7.手机对象初始化完毕,把对象地址赋值给t变量
内存图如下:
构造方法
含义:
一个与类同名的方法,对象的创建通过构造方法来完成,给对象中的成员进行初始化,每当类实例化一个对象时,类都会自动调用构造方法。
特点:
1.没有返回值,以及返回值类型(void都没有);
2.构造方法的名称要与本类的名称相同;
3.构造方法中可以为成员变量赋值
4.类中没有明确定义构造方法,编译器会自动创建一个无参默认构造方法;
5.类中定义了构造方法,系统将不会自动创建默认无参构造方法,如想使用,则需自己给出
代码示例:
package com.lian7.cn;
public class student {
String name;
int age;
public student() {
}
public student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void write(){
System.out.println("写作业");
}
}
class test{
public static void main(String[] args) {
student t=new student("小明",13);
System.out.println(t.getName());
System.out.println(t.getAge()+"岁");
t.write();
System.out.println("----------------");
student t1=new student();
t1.name="小花";
t1.age=9;
System.out.println(t1.name);
System.out.println(t1.age+"岁");
t1.write();
}
}
static关键字
特点:
1.随着类的加载而加载;
2.优先于对象存在;
3.被类的所有对象共享;
4.可以通过类名调用,也可以通过 对象来调用;
5.静态方法中没有this关键字,this随着对象的创建而存在,静态先于对象出现;
6.静态只能访问静态
静态变量与成员变量的区别
静态变量:
1.属于类,又叫类变量;
2.存储于方法区的静态区;
3.随着类的加载而加载;
4.即可以通过类名调用,也可以通过对象来调用;
成员变量:
1.属于对象,又叫实例变量;
2.存储于堆内存;
3.随着对象的创建而存在,随着对象的消失而消失;
4.只能通过对象名来调用
Math类的随机数
特点:
1.Math类在java.lang包下;
2.没有构造方法,它的成员都是静态的;
3.获取随机数的方法:public static double random();
代码示例:
猜数小游戏(数据范围自己随意设置)
package com.lian7.cn;
import java.util.Scanner;
public class cai {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入数据范围:");
int aa=sc.nextInt();
int num=(int)(Math.random()*aa+1);
System.out.println("请输入数字");
for (int i = 1; i <=10; i++) {
int userNum=sc.nextInt();
int a=10-i;
if(userNum>num){
System.out.println("猜大了,您还剩"+a+"次机会");
}else if (userNum<num){
System.out.println("猜小了,您还剩"+a+"次机会");
}else if (userNum==num){
System.out.println("恭喜您,猜对了");
break;
}
}
}
}