类和对象

2016/09/30 Java Object-Oriented

类和对象

  • 类:是一组相关的属性和行为的集合。是一个抽象的概念。
  • 对象:是该类事物的具体存在,是一个具体的实例。

变量

  • 成员变量
  • 局部变量

成员变量和局部变量的区别

  • 在类中的位置不同
    • 成员变量 类中方法外
    • 局部变量 方法内或者方法声明上
  • 在内存中的位置不同
    • 成员变量 堆内存
    • 局部变量 栈内存
  • 生命周期不同
    • 成员变量 随着对象的存在而存在,随着对象的消失而消失
    • 局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    • 成员变量 有默认的初始化值
    • 局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

构造方法

注意事项:

  • 如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
  • 如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
    • 这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

代码块

在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。

  • 局部代码块
    • 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
  • 构造代码块
    • 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
  • 静态代码块 在类中方法外出现,加了static修饰
    • 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载类的时候就执行,并且值执行一次。
class OOP {
    static {
        System.out.println("OOP static1");
    }

    //构造代码块
    {
        System.out.println("OOP 构造代码块1");
    }

    //构造方法
    public OOP() {
        System.out.println("OOP 构造方法1");
    }

    //构造方法
    public OOP(int a) {
        System.out.println("OOP 构造方法2");
    }

    //构造代码块
    {
        System.out.println("OOP 构造代码块2");
    }

    //静态代码块
    static {
        System.out.println("OOP static2");
    }
}

class OOP1 {
    static {
        System.out.println("OOP1 static");
    }
}

class OOP2 {
    static {
        System.out.println("OOP2 static");
    }

    public static void staticMethod() {
        System.out.println("staticMethod");
    }
}

class OOPDemo {
    static {
        System.out.println("static");
    }

    public static void method() {
        System.out.println("method");
        OOP1 oop1 = new OOP1();
    }

    public static void main(String[] args) {
        System.out.println("main");
        method();//类用到的时候static才加载
        System.out.println("---------------");
        //局部代码块
        {
            int x = 10;
            System.out.println(x);
        }
        //找不到符号
        //System.out.println(x);
        {
            int y = 20;
            System.out.println(y);
        }
        System.out.println("---------------");
        OOP c = new OOP();
        System.out.println("---------------");
        OOP c2 = new OOP();
        System.out.println("---------------");
        OOP c3 = new OOP(1);
        System.out.println("---------------");
        OOP2.staticMethod();//调用静态方法的时候不走构造方法和构造代码块,但是走静态代码块
    }
}

// static
// main
// method
// OOP1 static
// ---------------
// 10
// 20
// ---------------
// OOP static1
// OOP static2
// OOP 构造代码块1
// OOP 构造代码块2
// OOP 构造方法1
// ---------------
// OOP 构造代码块1
// OOP 构造代码块2
// OOP 构造方法1
// ---------------
// OOP 构造代码块1
// OOP 构造代码块2
// OOP 构造方法2
// ---------------
// OOP2 static
// staticMethod

匿名对象

就是没有名字的对象。

匿名对象好出

匿名对象可以作为实际参数传递,调用完毕就是垃圾。可以被垃圾回收器回收。


以上概念总结于传智播客Java基础课程

Search

    Post Directory