Java基础知识
Java中的作用域有哪些
表 1-1作用域的对比
作用域与可见性 | 当前类 | 同一package | 子类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
private | √ | × | × | × |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
- public 表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问,
- private 表明改成员变量或方法是私有的,只有当前类对其具有访问的权限,除此之外的其他类或者对象都没有访问权限。
- protected 表明成员变量或方法对该类本身,与他在同一个包中的其他类,在其他包中的该类的子类都可见。
- default 表明该成员变量或方法址有自己和与其位于同一包的类可见。若父类与子类位于同一个包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package包内,则没有访问权限。
注意:这些修饰符智能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰外部类(只有public,abstract或final能用来修饰外部类),但他们可以用来修饰内部类。
一个Java文件中是否可以定义多个类
一个Java文件中可以定义多个类,但是最多只有一个类被public修饰,并且这个类的类名与文件名必须相同,若这个文件中没有public的类,则文件名随便是一个类的名字即可。需要注意的是,当用javac指令编译这个.java文件时,他会给每个类生成一个对应的.class文件。
什么是构造函数
构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。
构造函数特点:
- 构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void)。
- 每个类可以有多个构造函数。
- 构造函数可以有0个、1个、或1个以上参数。
- 构造函数总是伴随着new操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用。构造函数在对象实例化时会被自动调用,且只运行一次;而普通的方法是在程序执行到他时被调用,且可以被该对象调用多次。
- 构造函数的主要作用是完成对象的初始化工作。
- 构造函数不能被继承,因此他不能被覆盖,但是构造函数能够被重载,可以使用不同的参数个数或参数类型来定义多个构造函数。
…
什么是反射机制
反射机制是Java语言中特别重要的特性。他允许程序在运行时进行自我检查,同时也对其他内部的成员进行操作。这个特性在开发时使用的不多,由于反射机制能够是现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会影响系统的性能。
具体而言,反射机制提供的功能有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。
最总要的作用就是可以在运行时动态创建类的对象,示例如下:
class Base {
public void f() {
System.out.println("Base");
}
}
class Sub extends Base {
public void f() {
System.out.println("Sub");
}
}
public class Test{
public static void main (String[] args) {
try { //使用反射机制加载类
Class c = class.forName("Sub");
Base b = (Base)c.newInstance();
b.f();
}catch(Exception e) {
e.printStackTrace();
}
}
}
程序结果为:
Sub
在反射机制中获取class类:
- Class.forName(“类的路径”),如上图所示。
- 类名.class
- 实例.getClass()
Java创建对象的方式4种:
- 通过new语句实例化一个对象。
- 通过反射机制创建对象
- 通过clone() 方法创建一个对象
- 通过反序列化的方式创建对象
package有什么作用
第一:提供多层命名空间,解决命名冲突。
第二: 对类按照功能进行分类,使项目的组织更加清晰。
以上是本人对《Java程序员面试笔记》的Java基础知识的小结。