学习JavaSE过程中的疑问点(第一周)
-
方法签名= 方法的名称和参数类型
-
构造器和方法是不是都可以重载,都可以在定义类的时候定义多个?
是的
-
java为什么实际上是值传递,包括引用数据类型。
传递的是引用的拷贝,而不是像c语言地址传递,传递的是实参!! 形参的地址被交换后,自然实参也发生改变,而java传递的是引用的拷贝,相当于传递的是一个标签,标签交换,不改变原来的标签(引用)
-
scanner的使用问题,连续输入字符串和整型
第一种解决方法:新创scanner 对象
第二种:都用字符串接受。
-
static ?
static修饰的方法只能调用static
static 修饰成员变量,所有实例共享。
静态的成员变量在类加载的最后一步默认初始化
静态方法也是在类加载以后,就可使用,可用类名.方法名()调用这个方法
必须用类名.静态方法(变量) 不要用实例去调用静态方法和变量,static变量,方法,是属于类的
于普通成员变量的对比
所属不同:
调用方式不同:
在内存中的位置不同
在内存中出现的时间不同
普通成员方法,所有成员都可以访问
静态成员方法,只可访问static成员
-
protect 修饰符
在一个包内,基类,子类,其他类都可访问
在不同包内,基类实例不可访问,子类在子类作用范围内的实例对象可访问,子类在其他类的实例对象不可访问,其他类里面的子类不可访问。
要用对象名调用一个继承自父类protected成员时,应该怎么思考能不能访问?
- 首先考虑是否同类,同包,如果同类或同包,创建父类对象,子类对象,必然都可以访问
- 如果不同包,考虑是否是子类中,如果不在子类中,无论创建什么对象,必然都不可以访问
- 如果在不同包的子类中,考虑调用protected成员的对象性质
- 如果使用的对象是父类对象,必然不可以访问
- 如果使用的对象是子类对象,仍然要考虑
- 如果该子类对象就是当前类的对象,可以访问
- 如果该子类对象不是当前类的对象,不可以访问
-
类加载
把自定义类,.class文件加载到方法区中,
类加载的时机?
- 实例化的时候
- 调用静态成员的时候
- 调用静态方法时
- 调用某个类的main方法时,类加载
-
面试考点 代码块问题
- 构造代码块中成员变量的赋值和成员变量的初始化赋值 看代码顺序
- 静态成员变量和静态代码块也是看代码顺序执行
- 无论实例化的时候用了哪个构造器,都会执行构造代码块-
- 静态代码块随着类加载执行,不能调用非静态-
- 构造方法方法中有this()调用构造代码器就先执行this 然后再就是代码块,
-
子类与父类存在同名变量,和同名方法问题的情况
同名变量的访问,对象.的访问方式,按照编辑器检索规则,先找子类,子类找到就不找了,即隐藏了父类同名变量。
同名方法的访问:覆盖父类的方法,覆盖的是对象实例的内存中,父类成员信息。而不是原来方法区中的父类被改变。
-
default 关键字有啥用?
同一类,同一包中子类,或者其他类都可以访问。
default的访问权限和”在一个包中就行,不管你在哪个类中“
-
多态特性中,向上转型得好处是什么?
能够精简代码,同一个引用触发多种形态,有利于以父类引用去传参,比声明多个子类更简洁。
-
子类为啥不继承父类的构造方法
因为子类初始化之前,先父类初始化,并把父类的初始化信息给了子类,父类不是对象。子类既然会调用父类无参构造,那么就不用继承父类构造方法了。
-
向上转型的时候,父类引用是否能够调用 子类属性(成员变量),和子类普通成员方法,和重写的方法。为什么?
对于成员变量而言:
无法直接访问子类属性,编译器的检测机制问题,从当前引用开始检测,相上检测。成员遍历没有多态
对于子类自己的普通成员方法:
父类引用无法调用,编译器的检测机制问题,从当前引用开始检测,相上检测。
对于重写的方法:
父类引用可以调用,
遍历时看左边,运行时看右边。只能调用子类的重写方法
父类引用指向了子类对象中的父类成员信息区域。
-
引用数据类型转换:
要在继承关系上转换。
向上转型:
对于成员变量来说:编译运行都看左边
对于成员方法来说:编译看左边,运行看右边
向下转型:
转换的是引用而已,指向的对象不变。引用中的地址不变。
-
Java没有语法意义上真正的多继承,但有实际意义上的多继承?这句花怎么理解?通过接口如何实现?
因为接口可以多继承,接口就是为了拓展功能。 实际意义上,接口可以让类继承多个接口的方法。
实际上实现了多继承。通过内部类也可以实现多继承