开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
类
static 表示类方法,又叫静态方法,可以直接通过类名调用,不需要创建实例
不加 static 的叫实例方法,必须通过实例或者对象调用
Public 在任何地方被外部调用,private 只能在同一类中被别的函数调用
变量声明
Point p = new Point();
/*
Point p;//分配存放位置的内存空间
p = new Point();//创建一个实例,然后赋值给 p。做了两件事情,分配内存,然后设置默认值,最后
*/
这里包括两部分,会申请两块内存,一块存放具体内容,一块存放实际内容的位置
一般在实际使用过程中,不会将成员变量定义为 public,而是采用函数进行访问
构造方法
在 Java 中,创建和初始化是绑定的
除了默认构造方法,可以忽略,还有从文件中读取信息来初始化
为了让方法名相同形参不同的构造器同时存在,所以有了方法重载
默认构造器
没有形参,作用是创建一个默认对象
只要有了有形参的构造方法,默认无形参的构造方法就失效了
this
- 用来指代对象,也就是要创建的对象
- 在方法内部局部变量与成员变量重名时候进行区分,成员变量 this.name。但是如果成员变量和局部变量不重名(或者某个方法中没有局部变量),就不需要 this 进行区分
- 调用本类中的构造方法
public Person(String name){
this.name = name;
}
public Person(String name, int age){
//this.name = name;
//使用 this 调用上面的构造方法
this(name);
this.age = age;
}
- this是对象层面的,static 是类层面的
public static void print(){
//这里会报错,因为 static 是类层面的关键词,而 this 是对象层面的
this.age = 10;
System.out.println("sadfaw");
}
垃圾回收
Java 对 new 出来的对象,就会进行垃圾回收,对于非 new 出来的对象,垃圾回收器就不知道如何释放该对象的内存空间,为了应对这个情况,Java 允许类中定义一个名为 finalize() 方法。
不同于 C++,手动清理内存,Java 自动清理内存空间,JVM 自己进行判断,所以有可能出现内存空间没有被释放的情况,只要内存够用就行,最后程序执行完,随着程序的推出,那些资源就会全部交还给操作系统。也就是说
- 对象可能不被垃圾回收
- 垃圾回收不等于 C++ 中的“析构”
- 垃圾回收只和内存有关
finalize() 方法主要清理的是本地方法分配的存储空间,因为本地方法是非 Java 代码,C++ 和 C,通过调用 C 的 malloc 函数分配存储空间,free 函数释放存储空间,所以需要在 finalize 中用本地方法调用它
由于垃圾回收机制,使得 Java 没有析构函数,但是垃圾回收器的存在并不熊完全替代析构函数,如果下网进行除释放存储空间之外的清理工作,还是得明确调用某个恰当的 Java 方法,等于使用析构函数,只是没有它方便
垃圾回收期对于提高对象的创建速度,有明显效果 Java从堆分配空间的速度,可以和其他语言从堆栈上分配空间的速度媲美
初始化
默认初始化
Java 需要保证所有变量在使用前都能进行初始化,所以成员变量即使没有初始化,也会默认给初始值,但是局部变量没有初始化,默认是程序员忘记了,所以会报错,进行提醒
也就是成员变量默认给初始值,而局部变量需要自己给初始值,否则会报错
指定初始化
在定义成员变量的时候指定进行初始化
//直接对成员变量进行初始化
public class test_1 {
int ss = 1241;
boolean 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;}
构造器实现初始化
构造器初始化在自动初始化之前
自动初始化的存在是有必要的,主要为了避免定义了一个重载构造器,它没有初始化某变量,同时在定义中也没有指定默认值的情况,所以虽然效率较低,在有构造器的时候变量可能要被定义两次,但能保证初始化得到保证
静态数据的初始化
无论创建多少个对象,静态数据只占用一份存储区域
先初始化静态对象,而后是非静态对象。
对象创建的过程:
- 由于构造方法实际上也是静态方法,所以 Java 解释器查找类路径
- 载入 类.class,执行静态初始化,静态初始化只在 class 对象首次加载的时候进行一次
- 在堆上分配对象的存储空间
- 存储空间清零,并且进行初始化
- 执行构造器