JavaSE学习(四)面向对象-构造方法、静态static

作者 Zhendong Ho 日期 2019-01-24
JavaSE学习(四)面向对象-构造方法、静态static

构造方法

构造方法的概述和作用

给对象的数据(属性)进行初始化。

构造方法格式特点

  • 方法名与类型相同。
  • 没有返回值,连void都没有。
  • 没有具体的返回值return。
class Person {
private String name;
private int age;

public Person() {
//return; //构造方法也是有return语句的,格式是return;
name = "张三";
age = 23;
}
}

构造方法的重载

方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表。

注意

  • 如果没有给出构造方法,系统将自动提供一个无参构造方法。
  • 如果给出了构造方法,系统将不再提供默认的无参构造方法。
  • 建议永远自己给出无参的构造方法。
class Person {
private String name;
private int age;

public Person() {
System.out.println("空参的构造");
}

public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参的构造");
}
}

静态static

static关键字的特点

  1. 随着类的加载而加载。
  2. 优先于对象存在。
  3. 被类的所有对象共享。(共性用静态,特性用非静态)
  4. 可以通过类名调用。(本身也可以通过对象名调用,但是推荐使用类名调用)

static的注意事项

  • 在静态方法中是没有this关键字的。
  • 静态方法只能访问静态的成员变量和静态的成员方法。
class Demo {
int num1 = 10; //非静态的成员变量
static int num2 = 20; //静态的成员变量

public void print1() { //非静态的成员方法
System.out.println(num1); //既可以访问静态的成员变量,也可以访问非晶态的
System.out.println(num2);
}

public static void print2() { //静态成员方法
//System.out.println(this.num1); //静态的成员方法不能访问非静态的
System.out.println(num2);
}
}

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

静态变量也叫类变量,成员变量也叫对象变量

  • 所属不同。静态变量属于类,所以也称为类变量;成员变量属于对象,所以也成为实例变量(对象变量)。
  • 内存中位置不同。静态变量存储于方法区的静态区;成员变量存储于堆内存。
  • 内存出现时间不同。静态变量随着类的加载而加载,随着类的消失而消失;成员变量随着对象的创建而存在,随着对象的消失而消失。
  • 调用不同。静态变量可以通过类名调用,也可以通过对象调用;成员变量只能通过对象名调用。

注意:如果一个类中所有的方法都是静态的,需要多做一步,私有构造方法,目的是不让其他类创建本类的对象。

Math类随机数

Math.random()会生成大于等于0.0并且小于1.0的伪随机数

class Demo2_Math {
public static void main(String[] args) {
//double d = Math.random();
//System.out.println(d);

for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}

//生成1-100的随机数
//Math.random() =====> 0.0000000 - 0.999999999
//Math.random() * 100 =====> 0.00000 - 99.99999999
//(int)(Math.random() * 100) =====> 0 - 99
//(int)(Math.random() * 100) + 1 =====> 0 - 100

for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * 100) + 1);
}
}
}