写点什么

Java 类

用户头像
michaelliu
关注
发布于: 2020 年 04 月 29 日
Java 类

面向对象编程中最核心的内容就是类,类可以看作函数的容器,但类更多地表示的是「自定义数据类型」。


定义一个类:


public class Point {        public static final double PI = 3.14149;        public int x;    public int y;        public double distance() {            return Math.sqrt(x  x + y  y);    }}
复制代码

变量和方法

实例变量


public class Point {        //实例变量    public int x;    public int y;        public double distance() {            return Math.sqrt(x  x + y  y);    }}
复制代码

实例方法


public class Point {        //实例变量    public int x;    public int y;    //实例方法    public double distance() {            return Math.sqrt(x  x + y  y);    }}
复制代码

静态变量


静态变量也称为类的变量


public class Point {    // 静态变量    public static final double PI = 3.14149;}
复制代码

静态方法


静态方法也称为类的方法


public class Point {        //静态方法    public static double distance() {            return 2 * 2;    }}
复制代码


  • 类方法只能访问类变量,不能访问实例变量,可以调用其他类的方法,不能调用实例方法;

  • 实例方法既能访问实例变量,也能访问类变量,既可以调用实例方法,也可以调用类方法;

变量默认值

实例变量初始化


  1. 声明变量并赋值

  2. 声明变量后在初始化代码块赋值


int x = 1;int y;
//初始化代码块{ y = 2;}
复制代码

静态变量初始化


  1. 声明变量并赋值

  2. 声明变量后在静态初始化代码块赋值


static int STATICONE  = 1;static int STATICTWO;
//静态初始化代码块{ STATIC_TWO = 2;}
复制代码

类的构造方法

默认构造方法


每个类至少要有一个构造方法,在通过 new 关键字创建对象的过程中会被调用,构造方法可以省略,Java 编译器会自动生成一个默认构造方法。但是一旦我们自定义了一个构造方法,Java 就不会再自动生成默认的构造方法。

私有构造方法


构造方法可以是私有的,即修饰符可以为 private,定义了私有构造方法的类有如下特点:


  • 不能创建类的实例,类只能被静态访问,只能访问类的静态变量和静态方法


public class TestClass {        public static final String HOST = "12344";
private TestClass() { }}
TestClass testClass = new TestClass(); // error 不能创建实例
TestClass.HOST // Ok
复制代码


  • 能创建类的实例,但只能被类静态方法调用,比如「单例」


public class TestClass {
private static TestClass mInstance;
private TestClass() { }
public static TestClass getInstance() { if (null == mInstance) { mInstance = new TestClass(); } return mInstance; }}
复制代码


  • 只能用来被其他构造方法调用,用于减少重复代码


public class TestClass {
public TestClass(int x) { this(x, 10); }
private TestClass(int x, int y) {
}}
复制代码

类和对象的生命周期


在程序运行的时候,当第一次通过 new 创建一个类的对象时,或者直接通过类名访问类变量和类方法时,Java 会将类加载进内存,为这个类分配一块空间,这个空间会包括类的定义、变量和方法信息,同时还有类的静态变量,并对静态变量赋值初始值。


类加载进内存后,一般不会释放,直到程序结束。一般情况下,类只会加载一次,所以静态变量在内存中只有一份。


当通过 new 创建一个对象的时候,在内存中,会存储这个对象的实例变量值,每做 new 操作一次,就会产生一个对象,就会有一份独立的实例变量。


对象的释放是被 Java 用垃圾回收机制管理的,大部分情况下,我们不用太操心,当对象不再被使用的时候会被自动释放。


对象和数组一样,有两块内存,保存地址的部分分配在栈中,而保存实际内容的部分分配在堆中。栈中的内存是自动管理的,函数调用入栈就会分配,而出栈就会释放。


用户头像

michaelliu

关注

Stay hungry, stay foolish. 2017.10.24 加入

120 %

评论

发布
暂无评论
Java 类