Java 类的总结

91 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

static 表示类方法,又叫静态方法,可以直接通过类名调用,不需要创建实例

不加 static 的叫实例方法,必须通过实例或者对象调用

Public 在任何地方被外部调用,private 只能在同一类中被别的函数调用

变量声明

Point p = new Point(); 
/*
Point p;//分配存放位置的内存空间
p = new Point();//创建一个实例,然后赋值给 p。做了两件事情,分配内存,然后设置默认值,最后
*/

这里包括两部分,会申请两块内存,一块存放具体内容,一块存放实际内容的位置

一般在实际使用过程中,不会将成员变量定义为 public,而是采用函数进行访问

构造方法

在 Java 中,创建和初始化是绑定的

除了默认构造方法,可以忽略,还有从文件中读取信息来初始化

为了让方法名相同形参不同的构造器同时存在,所以有了方法重载

默认构造器

没有形参,作用是创建一个默认对象

只要有了有形参的构造方法,默认无形参的构造方法就失效了

this

  1. 用来指代对象,也就是要创建的对象
  1. 在方法内部局部变量与成员变量重名时候进行区分,成员变量 this.name。但是如果成员变量和局部变量不重名(或者某个方法中没有局部变量),就不需要 this 进行区分
  1. 调用本类中的构造方法
public Person(String name){
    this.name = name;
}

public Person(String name, int age){
    //this.name = name;
    //使用 this 调用上面的构造方法
    this(name);
    
    this.age = age;
}
  1. this是对象层面的,static 是类层面的
public static void print(){
    //这里会报错,因为 static 是类层面的关键词,而 this 是对象层面的
    this.age = 10;
    System.out.println("sadfaw");
}

垃圾回收

Java 对 new 出来的对象,就会进行垃圾回收,对于非 new 出来的对象,垃圾回收器就不知道如何释放该对象的内存空间,为了应对这个情况,Java 允许类中定义一个名为 finalize() 方法。

不同于 C++,手动清理内存,Java 自动清理内存空间,JVM 自己进行判断,所以有可能出现内存空间没有被释放的情况,只要内存够用就行,最后程序执行完,随着程序的推出,那些资源就会全部交还给操作系统。也就是说

  1. 对象可能不被垃圾回收
  1. 垃圾回收不等于 C++ 中的“析构”
  1. 垃圾回收只和内存有关

finalize() 方法主要清理的是本地方法分配的存储空间,因为本地方法是非 Java 代码,C++ 和 C,通过调用 C 的 malloc 函数分配存储空间,free 函数释放存储空间,所以需要在 finalize 中用本地方法调用它

由于垃圾回收机制,使得 Java 没有析构函数,但是垃圾回收器的存在并不熊完全替代析构函数,如果下网进行除释放存储空间之外的清理工作,还是得明确调用某个恰当的 Java 方法,等于使用析构函数,只是没有它方便

垃圾回收期对于提高对象的创建速度,有明显效果 Java从堆分配空间的速度,可以和其他语言从堆栈上分配空间的速度媲美

初始化

默认初始化

Java 需要保证所有变量在使用前都能进行初始化,所以成员变量即使没有初始化,也会默认给初始值,但是局部变量没有初始化,默认是程序员忘记了,所以会报错,进行提醒

也就是成员变量默认给初始值,而局部变量需要自己给初始值,否则会报错

指定初始化

在定义成员变量的时候指定进行初始化

 //直接对成员变量进行初始化
 public class test_1 {
     int ss = 1241boolean bool = true;
 
     int i = f();
     int f() {
     return 11;
}

但是必须有顺序性

int j = g(i);
int i = f();
int f() = {return 11;}
int g(int n) = {return n * 10;}

构造器实现初始化

构造器初始化在自动初始化之前

自动初始化的存在是有必要的,主要为了避免定义了一个重载构造器,它没有初始化某变量,同时在定义中也没有指定默认值的情况,所以虽然效率较低,在有构造器的时候变量可能要被定义两次,但能保证初始化得到保证

静态数据的初始化

无论创建多少个对象,静态数据只占用一份存储区域

先初始化静态对象,而后是非静态对象。

对象创建的过程:

  1. 由于构造方法实际上也是静态方法,所以 Java 解释器查找类路径
  1. 载入 类.class,执行静态初始化,静态初始化只在 class 对象首次加载的时候进行一次
  1. 在堆上分配对象的存储空间
  1. 存储空间清零,并且进行初始化
  1. 执行构造器