七 构造方法、static关键字、创建对象过程及Math类随机数功能

七 构造方法、static关键字、创建对象过程及Math类随机数功能

一. 主要内容
在这里插入图片描述
二. 构造方法
什么是构造方法?构造方法的格式有什么特点?
答:构造方法就是创建对象,给对象中的成员进行初始化。
格式特点:
a:方法名与类名相同
b:没有返回值类型,连void都没有
c:没有具体的返回值
2.1 构造方法重载(重要)
在这里,我们需要注意的是,在构造方法的过程中。
a:若我们没有给出构造方法,系统将自动提供一个无参构造方法。
b:若我们给出了构造方法,系统将不再提供默认的无参构造方法。
NOTE:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
三. 创建一个对象的步骤(重要)
在这里我们以手机类为例,来探讨创建对象的过程
Phone p= new Phone();
步骤:
(0)加载测试类的字节码文件进内存的方法区,加载main方法进栈
(1):加载Phone.class文件进内存
(2):在栈内存为p开辟空间
(3):在堆内存为手机对象开辟空间
(4):对手机对象的成员变量进行默认初始化
(5):对手机对象的成员变量进行显示初始化
(6):通过构造方法对手机对象的成员变量赋值
(7):手机对象初始化完毕,把对象地址赋值给p变量
四. static关键字
4.1 static关键字的特点
a:随着类的加载而加载
b:优先于对象存在
c:被类的所有对象共享
其实static关键字很好理解,比如我们共同使用一个大学名称或者我们共同使用一个专业。所以,我们可以知道:如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
d:可以通过类名调用
其实它本身也可以通过对象名调用。
我们推荐使用类名调用。
静态修饰的内容一般我们称其为:与类相关的,类成员
4.2 使用static注意问题
a:在静态方法中是没有this关键字的
如何理解呢?
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。
b:静态方法只能访问静态的成员变量和静态的成员方法
简单记:静态只能访问静态,非静态可以访问静态的也可以访问非静态的
4.3 静态变量与成员变量
A:所属不同
静态变量属于类,所以也称为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
B:内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
C:内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
4.4 static关键字应用举例
这是作业当中的一个改错题:

class Demo {
int x;
String s;
float f;
boolean[] b = new boolean[5];

public static void main(String[] args){
System.out.println(x);
System.out.println(s);
System.out.println(f);
System.out.println(b[2]);
}
}

有错误。考察了static的使用方法。因为在main方法外,所定义的变量均为非静态变量,所以需要将非静态变量变为静态变量即可。最终修改为:

public class Demo {
  static   int x;
    static String s;
    static float f;
    static  boolean[] b = new boolean[5];
        public static  void main(String[] args){
                System.out.println( x);
                System.out.println(s);
                System.out.println(f);
                System.out.println(b[2]);
        }
}

最终输出结果为:
0
null
0.0
false

五. Math类随机数功能
先看一个具体的实例,完成猜数字大小的小游戏


import java.util.Scanner;

public class GuessNum {
    public static void main(String[] args) {
        int  randn =(int) ((Math.random() * 100) + 1);
       // System.out.println(randn);
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入一个1到100的整数");
            int rnum = sc.nextInt();
            if(rnum<0||rnum>100){
                System.out.println("请重新输入");
            }
            else if(rnum>randn){
                System.out.println("您输入的数大了");
            }
            else if(rnum<randn){
                System.out.println("您输入的数小了");
            }
            else if(rnum==randn){
                System.out.println("输入正确");
                break;
            }
        }
    }
}

A:Math类概述
类包含用于执行基本数学运算的方法
B:Math类特点
由于Math类在java.lang包下,所以不需要导包。
没有构造方法,因为它的成员全部是静态的。
C:获取随机数的方法
public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
D:要获取一个1-100之间的随机数,怎么解决?
int number = (int)(Math.random()*100)+1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值