Java构造方法、static关键字、随机数功能详解

一、构造方法

1. 构造方法概述及格式

  • 构造方法作用
    • 创建对象,当new一个对象时,构造方法就执行了
    • 对对象的内容进行初始化
  • 格式
    修饰限定符(一般是public) 类名(){
    	方法体;
     }
    
  • 构造方法特点
    • 无返回值类型,连void也没有
    • 方法名与类名相同,大小写也一致
    • 无返回值

2. 构造方法使用及注意事项

  • 使用方法

    • 空参构造:只是创建一个对象
    • 有参构造:创建一个对象的同时对对象内容进行初始化
  • 举例

    public class Student {
        String name;
        String ID;
        int age;
        char sex;//定义成员变量
    
        public Student() {//这是空参构造,如果不写,系统会默认提供,只是初始化一个对象
        }
    
        public Student(String name, String ID, int age, char sex) {
            this.name = name;//这个是有参构造,可以在初始化对象的时候赋初值
            this.ID = ID;
            this.age = age;
            this.sex = sex;
        }
    }
    public class StudentTest {//测试类
    public static void main(String[] args) {
        //用无参构造创建一个对象并进行初始化
        Student student1 = new Student();//new一个学生类对象student
        student1.name = "张三";
        student1.ID = "0001";
        student1.age = 20;
        student1.sex = '男';//对变量进行赋值
        //等价于用有参构造进行对象初始化
        Student student2 = new Student("张三", "0001", 20, '男');
    }
    }
    
  • 注意事项

    • 当类中没有构造函数的时候,系统会默认给出一个无参构造,是类中默认的构造函数,如果定义了自己的构造函数,系统不再提供默认无参构造
    • 在类中可以定义多个构造函数(是通过重载形式体现的,因为构造方法的名字都相同),用来进行不同的初始化

3. 构造方法与普通方法的区别

  • 定义内容:构造方法定义的是对象在创建之初就应该具备的内容,也就是对象的初始化内容;而普通方法用于定义对象的功能
  • 调用时间不同:构造方法是由JVM调用,给对象初始化;而普通方法是在对象建立后,当对象调用方法时才执行
  • 调用次数不同:构造方法只在对象创建时调用一次;普通方法可以被调用多次
  • 命名不同:构造方法必须和类名同名;而普通方法只需符合命名规范即可
  • 返回值:构造方法没有返回值;普通方法可以有返回值

4. 举例

  • 定义一个长方形(Rectangle)类,求周长和面积
public class Rectangle {
    private double length;
    private double width;

    public Rectangle() {//无参构造,建议显式给出
    }

    public Rectangle(double length, double width) {//有参构造
        this.length = length;
        this.width = width;
    }

    public void perimeter() {//输出周长
        System.out.println("周长是:" + 2 * (this.length + this.width));
    }

    public void area() {//输出面积
        System.out.println("面积是:" + this.length * this.width);
    }
}
public class RectangleTest {//测试类
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle(4, 5);//创建对象并初始化
        rectangle.perimeter();//输出周长
        rectangle.area();//输出面积
    }
}

二、static关键字

1. 含义及特点

  • 含义
    意为静态的,被static关键字所修饰的成员用来对类进行修饰和初始化,随着类的加载而加载,可以用来修饰成员变量和成员方法,被修饰的成员变量是所有本类对象所共有的,比如说一个专业所有学生的专业是一样的,那专业代码就可以设置成static的,为专业所有学生共有
  • 特点
    • 随着类的加载而加载,只加载一次
    • 优先于对象存在,被static修饰的成员是和类一起加载的,比对象先存在
    • 被类的所有成员共享
    • 可以通过类名直接调用,也可以通过对象名调用,但推荐使用类名调用,表示为类的成员

2. 注意事项

  • 静态的只能访问静态的
    因为静态成员是随着类的加载而加载的,此时还没有对象的存在,非静态的成员还未加载,在静态中访问还未加载的非静态成员就会访问不到
  • 非静态的可以访问静态的,也可以访问非静态的
    静态成员早于非静态成员(对象)出现,此时静态成员早已加载好,所以在非静态成员中访问静态成员,也可以访问非静态成员

3. 静态变量和成员变量的区别

  • 所属不同
    静态变量属于类,而成员变量属于对象
  • 内存中位置不同
    静态变量在方法区的静态区,而成员变量在堆区的对象中
  • 出现时间不同
    静态变量是随着类的加载而加载的,随着类的消失而消失;成员变量随着对象的加载而加载,随着对象的消失而消失
  • 调用方法不同
    静态变量可以通过类名或对象名进行调用,而成员变量只能通过变量名调用

三、Math类的随机数功能

1. Math类概述

  • Math类包含用于执行基本数学运算的方法
  • 特点
    • java.lang包下的内容不需要我们手动导入,其他包下的内容需要手动导入,Math类在java.lang包下,所以不需要导包
    • 无构造方法,因为Math成员都是静态的,随着Math类的加载而加载,不需要构造方法来实例对象
  • 获取随机数的方法
    • Math.random();
    • 返回一个大于等于零且小于1的double类型的浮点数

2. 猜数字小游戏

  • 猜1-100间随机数,5次机会

    public class GuessTheNumberGame {
        public static void main(String[] args) {
            int num = (int) (Math.random() * 100 + 1);//产生随机数
            System.out.println("请输入你猜的数,你有5次机会");
            int sum = 0;//用来统计用户输入次数,满五次程序自动退出
            while (true) {
                if (sum >= 5) {
                    System.out.println("5次机会已用完,游戏结束");
                    break;
                }
                int usenum = input();//接收用户输入的数
                if (usenum > num) {//进行比较,大于随机数就提示大了
                    System.out.println("你猜大了");
                } else if (usenum < num) {//进行比较,小于随机数就提示小了
                    System.out.println("你猜小了");
                } else {//进行比较,等于随机数就提示成功,并结束游戏
                    System.out.println("恭喜你,猜对了");
                    break;
                }
                sum++;
            }
        }
    
        private static int input() {//得到用户输入的数据
            Scanner in = new Scanner(System.in);
            return in.nextInt();
        }
    }
    
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值