栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java知识点回顾(5):部分知识点理解误区及学习疑惑整理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java知识点回顾(5):部分知识点理解误区及学习疑惑整理

1.在java中,当创建一个子类对象会不会先创建父类对象?

在Java中,当创建一个子类对象时,是不会先创建父类对象的。但是创建子类对象时,会去先调用父类的构造函数。

子类为什么能调用父类的方法?

子类会有一个父类的亚对象,拥有父类的完全属性和方法,但没有自己独立的空间,依赖于子类对象的空间,但不完全属于子类,可以通过super调用,注意:这里的super不是引用,因为亚对象不是真正意义的对象(没有自己的空间),而是一种标识符。

具体内容参考博客:

浅论创建子类对象时是否创建了父类对象_caoruntao_的博客-CSDN博客

2.怎么证明未显式定义构造方法时,编译器会自动生成无参的构造方法?

当没有显式定义构造方法,编译器会自动提供一个没有参数的构造方法。
若类中显式定义了构造方法,则默认的无参构造不再产生。

具体证明参考博客(从字节码层面进行验证):

怎么证明未显式定义构造方法时,编译器会自动生成无参的构造方法?_一朵花花的博客-CSDN博客_如果没有定义任何构造方法系统会自动产生一个构造方法

3.String str=""与new String()有什么区别?

String str ="aa":可能创建一个或者不创建对象。如果”abc”在字符串池中不存在,会在java字符串池中创建一个String对象(”abc”),然后str指向这个内存地址,无论以后用这种方式创建多少个值为”abc”的字符串对象,始终只有一个内存地址被分配;如果“abc” 在字符串池中存在, str直接指向这个内存地址。

String str = new String(“aa”):至少会创建一个对象,也有可能创建两个。因为用到new关键字,肯定会在堆中创建一个String对象,如果字符池中已经存在”abc”,则不会在字符串池中创建一个String对象,如果不存在,则会在字符串常量池中也创建一个对象。

具体解答参考知乎:

java 字符串常量池 - 知乎

4.在JAVA中为什么正最大数+1会等于负的最大数?

涉及到原码、反码、补码的相关知识点。

例如 00000001表示10进制1,而10000001表示10进制-1

那么整数最大是01111111

+1=10000000

但是由于10000000和00000000 表示+0和-0都是0没区别,所以规定10000000=负数最大,为-128

5.重载相关知识点

方法重载: 在同一个类中定义的方法,方法名称相同而形参列表不同。

重载和返回值类型无关。如果两个方法,参数一样,方法名一样,返回值类型不一样,这种不构成

重载,并且会编译出错。

构成重载的两个方法,必须在同一个作用域中。

final修饰的方法能否被重载?

可以。

6.final关键字

final 修饰类: 不能被继承。

final 修饰方法: 不能被重写。

final 修饰变量: 不能被修改, 必须初始化。

                        final对象本身的引用(地址)不能改变, 里面的内容(值)是可以改变的。

7.java中变量必须初始化吗?

成员变量可以不进行初始化,虚拟机也会确保它有一个默认的值。

初始化: 第一次赋值, 在第一次使用之前有值。

局部变量使用前有值, 就是直接赋值。

成员变量使用前有值, 就是在new完对象时, 保证有值。

8.创建对象的步骤

第一次创建对象:

1.类加载 (在第二次开始创建对象时, 就不需要加载了)

2.new -> 分配内存空间

3.给直接初始化的变量赋值

4.调用代码块

5.选择一个构造器调用

9.子类继承父类

继承了父类所有可见的属性和方法。

new 子类对象之前, 会先 new 父类对象。

new 子类对象会调用子类对象的构造方法, 第一行默认super()。

子类加载之前, 会先加载父类。

10.类加载的执行顺序

静态的代码块 static {}

静态的成员变量 static int age = 1

静态的成员方法 加载到了内存中, 不执行

类什么时候会加载: 第一次使用类的时候

                                第一次被创建对象

                                调用静态方法

                                调用子类的静态方法

                                第一次创建子类对象

                                调用静态成员变量 / 子类的静态成员变量

                                主动加载 Class.forName("类的名字 java.lang.String")

类加载完成: (将类的信息 从 .class 文件中 读取到了 JVM 的方法区中),会在方法区中产生一个 字节码对象 Class 对象.getClass()。

13.接口的相关修饰关键字

jdk1.8之前

public static final 成员变量

public abstract 方法

14.重写: 子类重写父类方法

方法名相同, 参数列表也要一样。

返回值: 基本数据类型-必须一样,引用类型-子类方法的返回值只能是父类方法的返回值的子类。

访问控制符: 子类方法只能更开放。

异常: 子类方法的异常类型 不能多于 父类方法。

static 或者 final 的方法 不能被重写的。

FileNotFoundException extends IOException extends Exception
class Koo {
            protected int method1() throws IOException { }
            protected Animal method2() { }
            public final void method3() { }
            public static void method4() { }
}
class Foo extends Koo {
            public int method1() { }
            protected Cat method2() { }
            public final void method3() { // 编译错误 }
            public static void method4() { } // 编译没错, 但不是重写
}
15.成员变量和静态变量(类变量)的区别:

1、成员变量所属于对象。所以也称为实例变量。

      静态变量所属于类。所以也称为类变量。

2、成员变量存在于堆内存中。

      静态变量存在于方法区中。

3、成员变量随着对象创建而存在。随着对象被回收而消失。

      静态变量随着类的加载而存在。随着类的消失而消失。

4、成员变量只能被对象所调用。

      静态变量可以被对象调用,也可以被类名调用。

所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号