Java(防踩雷)

防踩雷专区

Java内存分配

  A、栈:存储局部变量
  B、堆:存储所有new出来的
  C、方法区
  D、本地方法区(系统相关)
  E、寄存器(CPU使用)

如何制作一个说明书?

  1、写一个工具类
  2、对这个类加入文档注释
  3、用工具解析文档注释
        javadoc工具
  4、格式:
        javadoc -d 目录 -author -version java文件名
        目录:就可以写一个文件夹的路径
  5、帮助文档出错:找不到可以文档化的公共或受保护的类,告诉我们类的权限不够;

main方法格式

  public static void main(String[] args){...}'

  public:公共的,访问权限最大,易于被JVM调用;
  static:静态的,不需要创建对象,通过类名,方便JVM调用;
  void:无返回值,main方法被JVM调用,返回内容给JVM没有意义;
  main:是一个常见的方法入口
  String[] args:这是一个字符串数组,早期用来接受键盘录入的数据的;

代码:Student s = new Student();做了哪些事情?

  (1)把Student.class文件加载到内存;
  (2)在栈内存为s开辟空间
  (3)在堆内存为学生对象申请空间
  (4)给学生的成员变量进行默认初始化:null,0
  (5)给学生的成员变量进行显示初始化:shen,20
  (6)通过构造方法给成员变量进行初始化:yuanyuan,21
  (7)对象构造完毕,把地址赋值给s变量

方法注意事项:

  1、方法不调用不执行
  2、方法之间是平级关系,不能嵌套定义
  3、方法定义的时候,参数使用逗号隔开
  4、方法在调用的时候,不用再传递数据类型
  5、如果方法有明确的返回值类型,就必须有retrun语句返回

== 和 equals 区别

  ==
        基本类型:比较的是 内容;
        引用类型:比较的是 地址值;
  equals
        基本类型:不可以
        引用类型:
              如果在子类中 重写了 equals方法,比较的就是两个对象的 内容 是否相等;
              如果在子类中 没有重写e quals方法,比较的就是两个对象的 地址值 是否相通;

方法重载overload vs 方法重写override

  方法重载:在同一个类中,方法名相同,参数列表不同(个数、类型、顺序),与返回值、修饰符无关;
  方法重写:不同类中(继承关系),方法名相同,参数列表相同(个数,类型,顺序),返回值相同或是子类,子类修饰符不能严于父类;

this 和 super 区别

  1、分别是?
        this代表本类对象的引用;
        super代表父类存储空间的表示(可以理解为父类引用,可以操作父类成员)
  2、怎么用?
        a、调用成员变量
              this.成员变量  调用本类的成员变量
              super.成员变量  调用父类的成员变量
        b、调用构造方法
              this(...)  调用本类的构造方法
              super(...) 调用父类的构造方法
        c、调用成员方法
              this.成员方法  调用本来的成员方法
              super.成员方法  调用父类的成员方法

final修饰局部变量问题(面试题)

  基本类型:基本类型的值不能发生改变;
  引用类型:引用类型的地址值不能发生改变,但是该对象堆内存的值可以变;

static关键字

  1、特点:
        a、随着类的加载而加载;
        b、优先于对象存在;
        c、被类的所有对象共享;例如:同一个班的学生共用一个班级编号; 
        d、可以通过类名调用; 类名.静态变量名;
  2、注意事项
        a、在静态方法中没有this关键字:静态是随着类的加载而加载,this是随着对象的创建而存在的;静态比对象先存在
        b、静态方法只能访问静态的成员变量和静态的成员方法;

静态变量 VS 成员变量

  1、所属不同
        静态变量:属于类,称为类变量;
        成员变量:属于对象,称为实例变量(对象变量);
  2、内存中位置不同
        静态变量:存储于方法区的静态区;
        成员变量:存储于堆内存;
  3、内存出现时间不同
        静态变量:随着类的加载而加载,随着类的消失而消失;
        成员变量:随着对象的创建而存在,随着对象的消失而消失;
  4、调用不同
        静态变量:可以通过类名调用,也可以通过对象调用;
        成员变量:只能通过对象名调用;

静态中的面试题

  静态代码块,构造代码块,构造方法的执行顺序?
  答:静态代码块最快(只执行一次)->构造代码块(每次调用构造方法都执行)->构造方法

封装

  (1)隐藏实现细节,提供公共的访问方法
  (2)好处:
        隐藏实现细节,提供公共的访问方式
        提高代码的复用性
        提高代码的安全型
  (3)设计原则
        把不想让外界知道的实现细节给隐藏起来,提供公共的访问方法;
  (4)private是封装的一种体现
        封装:类、方法,private修饰成员变量

继承

  1、概述:把多个类中相同的内容给提取出来定义到一个类中
  2、如何实现继承:extends
        格式:class 子类名 extends 父类名 {}
  3、好处:
        提高了代码的复用性
        提高了代码的维护性
        让类与类产生了关系,是多态的前提
  4、弊端:类与类产生了关系,类的耦合性增强了
        开发原则:低耦合(类与类关系)、高内聚(自己完成某件事的能力)
  5、特点:
        Java只支持单继承,不支持多继承
        Java支持多层继承(继承体系)
  6、继承注意事项:
        a、子类只能继承父类所有非私有的成员(成员方法和成员变量)(打破封装性)
        b、子类不能继承父类的构造方法,但可以通过super关键字去访问父类构造方法
        c、不要为了部分功能而去继承
        d、子类中所有的构造方法默认都会访问父类中空惨的构造方法
        e、super()或者this()必须出现在第一条语句上,否则父类数据的多次初始化;
  7、什么时候使用继承:满足"is a"的关系时候使用
  8、子类中所有的构造方法默认都会访问父类中空参的构造方法:super()
        为啥?
        子类继承父类中的数据,可能会使用父类的数据,所以子类初始化之前,一定要完成父类数据的初始化;

Java继承中的成员关系

  1、成员变量
        子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问?
              子类的方法访问变量的查找顺序:
                    在子类方法的局部范围找,有就使用;
                    在子类的成员范围找,有就使用;
                    在父类的成员范围找,有就使用;
                    找不到。就报错
  2、构造方法
        子类的构造方法默认会去访问父类的无参构造方法;是为了子类访问父类数据的初始化
        父类中如果没有无参构造方法,怎么办?
              子类通过super去明确调用带参构造
              子类通过this调用本身的其他构造,但是一定会有一个去访问父类构造
              让父类提供无参构造
  3、成员方法
        子类的成员变量名称和父类中的成员方法名称一样,这个怎么访问呢?
              在子类中找,有就使用;
              在父类中找,有就使用;
              找不到。就报错

多态

  1、概念:同一个对象(事物),在不同时刻体现出来的不同状态。例如:水(固态、气态、液态)
  2、多态的前提:
        要有继承关系
        要有方法重写
        要有父类医用指向子类对象:父类 对象名 = new 子类();
  3、
posted @ 2021-01-27 22:19  一名初学者  阅读(100)  评论(0)    收藏  举报