1.2 Java面向对象编程-类 详解

文章介绍了Java编程中的构造方法,用于对象的创建,包括无参和带参的构造器。接着讨论了静态变量和静态方法,它们属于类而不是对象,并且生命周期始于类加载。此外,提到了主方法作为程序的入口点以及对象的创建和销毁,包括垃圾回收的基本概念。
摘要由CSDN通过智能技术生成

1.2.1类的构造方法

在Java中,构造方法是一种特殊类型的方法,也称构造器(Constructor)。对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。

构造方法的定义语法:

[权限修饰符] 方法名(形参列表) {
    方法体;
}

例:

public class People {
    int age;    //属性age

    public People(int age) {    //构造器,与类同名
        this.age = age;    //将参数age的值赋给属性age
    }

    public People() {    //无参构造器
        this(18);
    }
    
    public static void main(String[] args) {
        People p1 = new People();    //调用无参构造器
        System.out.println("p1的年龄为" + p1.age + "岁");    //输出:p1的年龄为18岁
        People p2 = new People(20);    //调用自定义的构造器
        System.out.println("p2的年龄为" + p2.age + "岁");    //输出:p2的年龄为20岁
    }
}

如果类中没有明确定义构造器,编译器会自动创建一个无参默认构造器,一旦定义构造器,默认构造器将被覆盖,除非人为定义。

例:

public class People {
    People() {}    //无参默认构造器,存在但不显示
}
public class People {
    int age;
    public People(int age) {}    //无参默认构造器被定义的构造器覆盖 不再存在People() {}
}
  1. 构造方法没有返回值。

  1. 方法名必须和类名一致。

  1. 形参列表和成员方法规则一样。

  1. 构造器的调用,由系统完成。

1.2.2 静态变量和静态方法

在Java中,由static关键字修饰的变量和方法称为静态变量和静态方法,也称类变量,类方法。jdk8以前,静态对象放在静态域;jdk11以后,静态对象放在堆。

一.静态变量

定义语法:

权限修饰符 static 数据类型 变量名;   //推荐

或

static 权限修饰符 数据类型 变量名;

访问静态变量

类名.静态变量名;    //推荐

或

对象名.静态变量名;

例:

public class VisitStatic {
    public static void main(String[] args) {
        //类名.静态变量名
        //说明:静态变量是随着类的加载而创建,所以即使没有创建对象实例也可以访问
        System.out.println(A.name);
        A a = new A();
        //对象名.静态变量名
        System.out.println(a.name);
    }
}
class A {
    //静态变量
    public static String name = "我叫A";
}

案例:

public class StudentPay {
    String name;   //缴费总和
    static int count = 0;   //共享的属性,人数

    public StudentPay(String name) {
        this.name = name;    //记录姓名
        count++;    //人数递增
    }

    public static void main(String[] args) {
        StudentPay p1 = new StudentPay("张三");
        System.out.println("第" + count + "位同学缴费,姓名:" + p1.name);
        StudentPay p2 = new StudentPay("李四");
        System.out.println("第" + count + "位同学缴费,姓名:" + p2.name );
        StudentPay p3 = new StudentPay("王五");
        System.out.println("第" + count + "位同学缴费,姓名:" + p3.name);
    }
}
  1. 静态变量与普通变量的区别:静态变量是该类所有对象共享的,而普通变量是每个对象独享的。

  1. 加上static关键字成为类变量或静态变量,否则称为实例变量/普通变量/非静态变量。

  1. 局部变量不可以用static关键字声明。

  1. 实例变量不能通过类名.变量名进行访问。

  1. 静态变量的生命周期是随着类加载开始,随着类消亡而销毁。

二.静态方法

定义语法:

权限修饰符 static 数据返回类型 方法名() {};   //推荐

或

static 权限修饰符 数据返回类型 方法名() {};

访问静态方法

类名.静态方法名;

或

对象名.静态方法名;

静态代码块——当类加载时,首先会执行static代码块中的程序,并且只执行一次。

语法如下:

public class Test {
    static {
         ...//静态代码块中可写入一些初始化代码
    }
}

使用场景:当方法中不涉及到任何和对象相关的成员,则可将方法设计成静态方法,提高开发效率。

  1. 在静态方法中不可以使用this关键字。

  1. 在静态方法中不可以直接调用非静态方法。

  1. 主方法必须用static声明。

  1. 静态方法中只能访问静态变量或静态方法。

1.2.3 类的主方法

主方法是类的入口点,Java编译器通过主方法来执行程序。

定义语法:

public static void main(String[] args) {
    ...
}
  1. 主方法的形参为数组args[0]~args[n]表示从第1个参数到第n-1个参数,可以使用args.length获取参数的个数。

  1. 主方法是静态的。

  1. 主方法没有返回值(void)。

1.2.4 对象

在Java中,通过new操作来创建对象。通过1.2.1的阐述,每实例化一个对象就会自动调用一次构造方法。

定义语法:

类名 对象名 = new 类名();    //new 类名() 是对象的实体
类名 对象名 = new 类名("a"); //"a"是构造方法的参数
一.访问对象的属性和行为
public class Cat {
    String name;    //名字
    String color;    //颜色
    String behavior;    //行为

    public Cat(String name, String color, String behavior) {    //形参列表
        this.name = name;
        this.color = color;
        this.behavior = behavior;
    }
    public void run() {    //跑
        System.out.println(behavior);
    }

    public static void main(String[] args) {
        Cat cat = new Cat("猫猫","白色","跑");    //访问对象属性和行为
        //当创建对象后,可以使用 对象.类成员 来获取
        System.out.println(cat.name + "的颜色是" + cat.color + ",正在" +cat.behavior);
    }
}
二.对象的销毁

在Java中,每个对象都有生命周期。

  1. 对象引用超过其作用范围,这个对象将被视为垃圾。

{
    Test t1 = new Test();
}    //当对象t1超过其作用范围将消亡
  1. 将对象赋值为null。

{
    Test t1 = new Test();
    t1 = null;    //t1对象将消亡
}    

了解:在Java中,提供了一个finalize( )方法,这个是Object类的方法,它被声明为protected,用户可以在自己的类中定义这个方法。如果在类中定义了finalize( )方法,在垃圾回收时会首先调用该方法,在下一次垃圾回收动作时,才真正回收被对象占用的内存。

注意:垃圾回收或finalize( )方法并不保证一定发生。如果Java虚拟机内存损耗殆尽,将不会执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恨弦音犹在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值