《java程序员面试笔试宝典》学习笔记

《java程序员面试笔试宝典》学习笔记

在此声明,本文为个人学习笔记,内容主要摘抄与整理自《java程序员面试笔试宝典–何昊》一书(买了正版书)。特此感谢作者,若用于其他商业使用请联系作者。

笔记目录

  1. java基础知识
  2. java Web

知识点
1、java的优点
(1)、java为纯面向对象的语言
(2)、平台无关性。“一次编译,到处运行”,跨平台。
(3)、内置类库丰富
(4)、提供对Web应用开发的支持
(5)、较好的安全性和健壮性
(6)、去除C++语言中难以理解的特征,例如头文件、指针、结构、单元、运算符重载,多重继承。

2、为什么需要public static void main(String[] args)这个方法
public static void main(String[] args)为java程序的入口方法,JVM在运行程序时,会首先查找main()方法。其中,public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main()方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名,main()直接访问,JVM在启动时就是按照上述方法的签名来查找方法的入口地址,若能找到就执行,找不到,则会报错。
void表明方法没有返回值;
main是JVM识别的特殊方法名,是程序的入口方法;
字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段。
引申:
2.1、main()方法的可用定义格式:
(1)、public与static没有先后顺序
(2)、可以使用final修饰
(3)、可以使用synchronized修饰
(4)、不能使用abstract修饰
2.2、同一个.java文件中可以有多个main()方法,但是只有与文件名相同的用public修饰的类中的main()方法才能作为整个程序的入口方法。
如下例:创建一个名为Test.java的文件

class T{
    public static void main(String[] args){
        System.out.println("T main");
    }
}

public class Test{
    //程序入口函数
    public static void main(String[] args){
        System.out.println("Test main");
    }
}

程序运行结果:
Test main

3、Java程序初始化的顺序
(1)、遵循三个原则:
静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能初始化多次;
父类优先于子类进行初始化;
按照成员变量的定义顺序进行初始化。
(2)、执行顺序如下:
父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、
父类非静态变量、父类菲静态代码块、父类构造函数、
子类非静态变量、子类菲静态代码块、子类构造函数

class Base{
    static{
        System.out.println("Base static block");
    }
    {
        System.out.println("Base block");
    }
    public Base(){
        System.out.println("Base constructor");
    }
}
public class Derived extends Base{
    static{
        System.out.println("Derived static block");
    }
    {
        System.out.println("Derived block");
    }
    public Derived(){
        System.out.println("Derived constructor");
    }
    public static void main(String[] args){
        new Dervied();
    }
}

程序运行结果:
Base static block
Dervied static block
Base block
Base constructor
Dervied block
Dervied constructor

4、Java中的变量作用域:
(1)、成员变量:与类的实例化对象的作用范围相同。
(2)、静态变量:使用static修饰的成员变量,不依赖于特定实例,只要一个类被加载,JVM就会给类的静态变量分配存储空间。
(3)、局部变量:作用域与可见性为所在花括号内
另外,成员变量可以有权限修饰符,区别如下表:
《java程序员面试笔试宝典》学习笔记_第1张图片

5、构造函数的特点
(1)、构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void)
(2)、每个类可以有多个构造函数。默认编辑器会提供无参构造函数
(3)、构造函数可以用0个、1个或1个以上的参数
(4)、构造函数总是伴随new操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用
(5)、构造函数作用是完成对象的初始化工作
(6)、构造函数不能被继承,但是可以被重载
(7)、子类可以通过super关键字来显示的调用父类的构造函数,当父类没有提供无参构造函数,子类中必须显式地调用父类的构造函数。
(8)、当父类和子类都没有定义构造器时,编译器会为父类生成一个默认的无参构造函数,给子类也生成一个默认的无参构造函数。

class Base{
    static{
        System.out.println("Base static block");
    }
    {
        System.out.println("Base block");
    }
//  public Base(){
//      System.out.println("Base constructor");
//  }

    public Base(String arg){
        System.out.println("Base constructor-->"+arg);
    }
}
public class Derived extends Base{
    static{
        System.out.println("Derived static block");
    }
    {
        System.out.println("Derived block");
    }
    public Derived(){
        super("dd");//此处必须显式调用,负责编译不通过(原则(7))
        System.out.println("Derived constructor");
    }
    public static void main(String[] args){
        new Derived();
    }
}

程序运行结果:
Base static block
Derived static block
Base block
Base constructor–>dd
Derived block
Derived constructor

6、反射机制
允许程序在运行时进行自我检查,同时也允许对其内部的成员进行操作
功能:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行是创建对象;在运行时调用对象的方法。
获取Class类的方法:
(1)、class.forName(“类的路径”)
(2)、类名.class
(3)、实例.getClass()
笔试题:
Java创建对象的方式有哪几种?
答案:共有以下四种
(1)、通过new语句实例化一个对象
(2)、通过反射机制创建对象
(3)、通过clone()方法创建一个对象
(4)、通过反序列化创建对象

7、面向对象有哪些特征
四大特征:抽象、继承、封装和多态
(1)、抽象。抽象就是忽略一个主题中与当前目标无关的那些方面,以便充分地注意与当前目标有关的方面。抽象包括两个方面:一是过程抽象;二是数据抽象
(2)、继承。一种联结类的层次模型,并且允许和鼓励类的重用,他提供一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。
(3)、封装。封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。
(4)、多态。多态是指允许不同类的对象对同一个消息做出响应。
8、什么是继承
通过继承,子类可以使用父类中的一些成员变量与方法,从而提高代码的复用性,提高开发效率。

你可能感兴趣的:(java开发基础知识)