JavaSE——面向对象(二)(构造方法、对象的创建步骤、static关键字、JDK帮助文档、Math类)

牧云@^-^@ 提交于 2019-12-10 18:53:12

1.构造方法

  • 概述
创建对象,给对象中的成员进行初始化,与set()方法的作用差不多
  • 特点
(1)方法名必须与类名相同
(2)没有返回值类型,更没有具体的返回值
  • 注意事项
(1)在一个类中,如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
(2)如果我们自己给出了有参的构造方法,那么系统就不再提供的无参的构造方法,如果想要使用无参的构造方法,就必须自己给出,建议永远自己给出无参的构造方法。
  • 案例演示
//建一个电脑类,使用set和构造方法两种方式给变量赋值,并分别用get和一个方法两种方法输出。
package org.westos.demo5;
public class Computer {
    private String name;
    private double price;
    public Computer() {
    }
    public Computer(String name, double price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public void show(){
        System.out.println("品牌是"+name+",价格是"+price);
    }
}
//测试
package org.westos.demo5;
public class MyTest1 {
    public static void main(String[] args) {
        Computer computer1 = new Computer();
        computer1.setName("联想");
        computer1.setPrice(4000);
        System.out.println("品牌是"+computer1.getName()+",价格是"+computer1.getPrice());

        Computer computer2 = new Computer("戴尔",5000);
        computer2.show();
    }
}

2.创建对象的步骤

	以此为例:Student s = new Student();
步骤:
	(1):加载Student.class文件进内存
	(2):在栈内存为s开辟空间
	(3):在堆内存为学生对象开辟空间
	(4):对学生对象的成员变量进行默认初始化
	(5):对学生对象的成员变量进行显示初始化
	(6):通过构造方法对学生对象的成员变量赋值
	(7):学生对象初始化完毕,把对象地址赋值给s变量

3.static关键字

  • 概述
static:状态修饰符,可以修饰成员变量,也可以修饰成员方法,修饰成员变量,此变量为共享变量,可以被该类的所有对象,所共享。
  • static的内存图
package org.westos.demo5;
public class Student {
    public  String name;
    public  static String type="大学生";
}
//测试
package org.westos.demo5;
public class MyTest1 {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name="张三";
        student1.type="小学生";
        Student student2 = new Student();
        student2.name="李四";
        System.out.println(student1.name);
        System.out.println(student1.type);
        System.out.println(student2.name);
    }
}

在这里插入图片描述

  • 特点
(1)随着类的加载而加载
(2)优先于对象而存在
(3)被类中的所有对象所共享
(4)可以通过类名来调用(推荐),也可以通过对象名来调用
  • 注意事项
(1)在静态方法中没有this关键字,因为静态是随着类的加载而加载,而this是随着对象的创建而产生,静态比对象先产生。
(2)静态方法只能访问静态的成员变量和静态的成员方法。原因如上
  • 案例演示
package org.westos.demo5;
public class Student {
    public  String name;
    public  static String type="大学生";
    public static void Study(){
        System.out.println("这是一个静态方法");
    }
}
package org.westos.demo5;
public class MyTest1 {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name="张三";//只能用对象名来调用
        Student.type="小学生";//类名调用(推荐)
        //student1.type="小学生";
        Student student2 = new Student();
        student2.name="李四";
        System.out.println(student1.name);
        System.out.println(Student.type);
        System.out.println(student2.name);
        Student.Study();
    }
}
  • 总结(成员变量与静态变量的区别)

(1) 所属不同

成员变量属于对象,静态变量属于类。

(2)内存中的位置不同

成员变量存储于堆内存,静态变量存储于方法区中的静态区。

(3)生存周期不同

成员变量随着对象的创建而存在,随着对象的消失而消失;静态变量随着类的加载而加载,随着类的消失而消失。

(4)调用方式不同

成员变量只能通过对象名来调用,而静态变量既可以通过对象名来调用,也可以通过类名来调用(推荐)。

4.JDK帮助文档

JDk中为我们提供了好多封装好的类,但是我们又不可能将这些类的用法全部记住,所以就有了JDK帮助文档帮助我

找到文档,打开文档
点击显示,找到索引,出现输入框
你应该知道你找谁?举例:Scanner
看这个类的结构(需不需要导包)
看这个类的说明(简单的了解一下)
看开始版本
看构造方法
看成员方法
	看左边:是否是static的,如果是我们就不需要创建对象,直接可以使用类名调用该方法;看返回值,返回值是什么我就使用什么接收
	看右边:看参数列表: 参数的个数 , 参数的类型 ; 要什么参数我是用的时候,就传递什么参数					
然后使用

5.Math类

  • Math类概述
	类包含用于执行基本数学运算的方法
  • 获得随机数
random() :返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
举例:获取一个1-100之间的随机数
int n=(int)(random()*100+1);
  • 实例验证(猜数游戏)
package org.westos.demo5;
import java.util.Scanner;
public class Game {
    public static void main(String[] args) {
        int count=5;
        int number=(int) (Math.random()*100+1);
        while(count>0){
            count--;
            Scanner scanner = new Scanner(System.in);
            System.out.println("猜数:");
            int num = scanner.nextInt();
            if(num>number){
                System.out.println("猜大了");
                System.out.println("你还有"+count+"机会");
            }else if(num<number){
                System.out.println("猜小了");
                System.out.println("你还有"+count+"机会");
            }else{
                System.out.println("恭喜你 猜对了");
            }
        }
        if(count==0){
            System.out.println("游戏结束");
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!