JAVA学习day07 JavaSE基础——构造方法 对象的创建步骤 static关键字
1.1 构造方法的概述和作用
构造方法是为了创建对象并对对象中的成员进行初始化;
格式:方法名和类名相同,没有返回值类型和具体的返回值。
1.2 构造方法的重载
如果我们没有自己创建构造方法,系统将自动提供一个空参构造方法;
建议用自己给的空参构造方法。
下面我们通过一个案例演示构造方法:
public class Phone {
private String name;
private String color;
private double price;
public Phone(){
System.out.println("空参构造方法");
}
public Phone(String name){
System.out.print("有参构造方法"+"\t");
this.name = name;
System.out.println(name);
}
}
//测试
public class MyTest {
public static void main(String[] args) {
Phone phone = new Phone("小米");
Phone phone1 = new Phone();
}
}
运行结果:
图 1-1 运行结果截图
在上面的代码中我们创建一个手机类,在这个手机类中我们加上了自己的空参和有参构造方法,在测试类中我们可以看到创建对象时会调用构造方法,传参和不传参是两种不同的结果。
下面我们来写一个完整的手机类代码:
public class Phone {
private String name;
private String color;
private double price;
public Phone(){
System.out.println("空参构造方法");
}
public Phone(String name){
System.out.print("有参构造方法"+"\t");
this.name = name;
System.out.println(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public void show(){
System.out.println(name+"手机"+color+"价格"+price );
}
}
//测试
public class MyTest {
public static void main(String[] args) {
//Phone phone = new Phone("小米");
Phone phone = new Phone();
phone.setName("华为");
phone.setColor("亮黑色");
phone.setPrice(3999);
phone.show();
}
}
运行结果:
图 1-2 运行结果截图
1.3 长方形案例的练习
定义一个长方形(RectangleDemo)类,定义求周长(length)和面积(area)的方法,然后定义一个测试类Test,进行测试。
public class Retangle {
private double chang;
private double kuan;
public Retangle(){
}
public double getChang() {
return chang;
}
public void setChang(double chang) {
this.chang = chang;
}
public double getKuan() {
return kuan;
}
public void setKuan(double kuan) {
this.kuan = kuan;
}
public double getLength(){
System.out.print("周长:");
return 2 * (chang + kuan );
}
public double getArea(){
System.out.print("面积:");
return chang * kuan;
}
}
//测试类
import java.util.Scanner;
public class MyTest1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入长");
double chang = scanner.nextDouble();
System.out.println("请输入宽");
double kuan = scanner.nextDouble();
Retangle retangle = new Retangle();
retangle.setChang(chang);
retangle.setKuan(kuan);
System.out.println(retangle.getLength());
System.out.println(retangle.getArea());
}
}
运行结果:
图 1-3 运行结果截图
1.4 static 关键字
● static 关键字可以用来修饰代码块,成员方法和属性;
● 被 static 关键字的修饰特点:
(1)随着类的加载而加载;
(2)优先于对象而存在;
(3)被类的所有对象共享;
(4)可以直接通过类名调用,静态修饰的内容我们一般称为:与类相关的,类成员。
● static 的注意事项:
(1)静态方法中没有关键字 this ;这是因为 this 是随着对象的创建而被使用;而静态方法是优先于对象存在的;
(2)静态方法只能访问静态的成员变量和静态的成员方法。
1.5 静态变量和成员变量的区别:
(1)所属不同:
静态变量属于类,称为类变量,成员变量属于对象,称为实例变量;
(2)在内存中的位置不同:
静态变量存储在方法区的静态区;
成员变量存储在堆内存;
(3)在内存中出现的时间不同:
静态成员随着类的加载而存在,随着类的消失而消失;
成员变量随着对象的创建而存在,随着对象的消失而消失;
(4)调用不同:
静态变量可以通过类名调用,也可以通过对象名调用;
成员变量只能通过对象名调用;
案例:
public class Person {
static String name;
static int age;
char sex;
public Person(){
}
public void work(){
System.out.println(name+sex+"在上班");
}
public void rest(){
System.out.println(name+"在休息");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Person person = new Person();
//通过创建对象调用成员变量和成员变量
person.name = "张三";
person.age = 20;
person.sex = '男';
person.work();
person.rest();
Person.name = "王五";
Person.age = 21;
person.work();
person.rest();
}
}
运行结果:
我们可以看到在使用类名调用静态变量后再次打印输出对象之前的赋值时值已经发生改变。
图 1-4 运行截图
在写代码时可以尝试用类名调用成员变量,会出现报错:
图 1-5 运行截图
1.6 猜数字小游戏
猜数字小游戏(数据在1-100之间)
代码:
import java.util.Random;
import java.util.Scanner;
public class GuessNum {
public static void main(String[] args) {
Random random = new Random();
int num = random.nextInt(100);
for (int i = 0; i < 10; i++) {
System.out.println("请输入一个整数(1--100之间)");
Scanner scanner = new Scanner(System.in);
int userNum = scanner.nextInt();
if(userNum == num){
System.out.println("猜对了!");
return;
}
else if(userNum > num){
System.out.println("猜大了");
}
else if (userNum < num){
System.out.println("猜小了");
}
}
}
}
运行结果:
图 1-6 运行截图