面向对象(二)

变量作用域

在Java中主要的变量就是属性(成员变量)和局部变量,局部变量一般指的是定义在成员方法体内部的变量,也可以是定义在方法块中的变量;全局变量的作用域就是整个类中。局部变量的作用域在方法体的块中;全局变量可以不用赋值直接使用,有默认值,局部变量必须赋值后使用,没有默认值。

使用细节:

  • 局部变量和属性可以重名,访问的时候遵守就近原则;
  • 在同一个作用域中,比如在同一个成员方法中,不能存在两个同名的局部变量;
  • 属性随着类的创建而创建,随着对象的销毁而销毁。局部变量随着它的代码块而创建,伴随着代码块的结束而销毁,即在一次方法调用中;
  • 属性即可以在本类的方法中使用,也可以在其它类的方法中使用,局部变量只能在自己的方法块中使用。属性可以添加访问修饰符,局部变量不可以添加访问修饰符。

构造方法

构造器的主要作用是完成对象的初始化,并不是创建对象。

构造器的特点:

  • 构造器和类名相同;

  • 没有返回值,不能写void;

  • 在创建对象时,会由系统自动调用完成对象的初始化;

  • 构造器可以重载,跟成员方法的重载一样,根据形参列表的不同区别;

  • 在定义类的时候,如果我们没有写构造器,系统会给我们添加一个默认的无参构造器,可以通过javap反汇编查看

如果我们在类中定义了一个构造器函数,系统就不会给我们再添加默认的无参构造器,除非我们显示的去添加。

public class Dog{
    String name;
    int age;
}

使用javap反汇编语言查看Dog.class文件内容:

javap反汇编指令介绍
javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。

语法:

  javap [ 命令选项 ] class. . .

  javap 命令用于解析类文件。其输出取决于所用的选项。若没有使用选项,javap 将输出传递给它的类的 public 域及方法。javap 将其输出到标准输出设备上。

命令选项

  -help 输出 javap 的帮助信息。

  -l 输出行及局部变量表。

  -b 确保与 JDK 1.1 javap 的向后兼容性。

  -public 只显示 public 类及成员。

  -protected 只显示 protected 和 public 类及成员。

  -package 只显示包、protected 和 public 类及成员。这是缺省设置。

  -private 显示所有类和成员。

  -J[flag] 直接将 flag 传给运行时系统。

  -s 输出内部类型签名。

  -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。

  -verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本

  -classpath[路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。

 - bootclasspath[路径] 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jrelib

  t.jar 和 jrelibi18n.jar 中。

  -extdirs[dirs] 覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。

对象创建流程内存分析

class Person{
    String name;
    int age = 90;
    public Person(String pName,int pAge){
        age = pAge;
        name = pName;
    }
}

Person p = new Person("小琪",20);

先加载类信息(只会加载一次);在堆中开辟内存空间,进行默认初始化,name:null,age:0;然后进行显示初始化,age:90;然后调用构造函数进行初始化工作,所以构造函数是进行类的初始化,不能进行类的创建,将age,name赋值,并将对象的地址返回给对象变量。

this关键词

this指代当前对象的引用。

this可以用来访问本类的属性、方法、构造器;

this可以用来区分局部变量和属性

this访问构造器方法,只能在构造器中使用调用其它构造器,而且必须是构造器的第一条语句

this不能在类定义的外部使用,只能在类定义的内部使用

posted @ 2021-09-22 22:42  无涯子wyz  阅读(56)  评论(0)    收藏  举报