给大家推荐个超级好用的软件,微信读书,我刚发现的宝藏APP。新人可以领取30天的无限阅读卡,看书的时常还能对话无限卡,全场的书免费看!!!最关键的是,还有各种技术类的书,像什么《编程之美》啊都有,舒服~
此篇记录一些阅读《Java程序员面试笔试宝典》的小知识,可能会随着看书的进度不断更新,写在这里也是怕自己以后忘记,毕竟好记性不如烂笔头。
一、基本概念
1、java语言有哪些优点
1、Java为纯面向对象的语言;
2、平台无关性。Java语言可以“一次编译,到处运行”。由于Java为解释型语言,编译器会把Java代码变成“中间代码”,然后在JVM上解释执行,具有很好的可移植性;
3、Java提供了很多内置的类库;
4、提供了对Web应用开发的支持。
2、Java与C/C++有什么不同
1、Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。因此,Java的执行速度比C/C++慢,但是Java能够跨平台执行,而C/C++不能;
2、Java为纯面向对象语言,所有代码(包括函数、变量等)必须在类中实现。C++兼具面向过程和面向过程编程的特点,可以定义全局变量和全局函数;
3、与C/C++语言相比,Java语言中没有指针的概念,这有效防止了C/C++语言中操作指针可能引起的系统问题,从而使程序变得更加安全;
4、与C++语言相比,Java语言不支持多重继承,但是Java语言引入了接口的概念,可以同时实现多个接口;
5、在C++语言中,需要开发人员去管理对内存的分配(包括申请与释放),而Java语言提供了垃圾回收器来实现垃圾的自动回收,不需要程序显式地管理内存的分配。
3、Java程序初始化的顺序
Java程序初始化工作可以在许多不同的代码块中来完成(例如静态代码块、构造函数等),它们执行的顺序如下:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。
4、Java中的作用域
1、public。表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问;
2、private。表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限;
3、protected。表明成员变量或方法对该类自身,与它在同一个包中的其它类,在其它包中的该类的子类都可见;
4、default。表明该成员变量或方法只有自己和与其位于同一包内的类可见。
!!!注意!!!这些修饰符只能修饰成员变量,不能用来修饰局部变量。private与protec-ted不能用来修饰类(只有public、abstract或final能用来修饰类)
5、构造函数
构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。在Java语言中,构造函数具有以下特点:
1、构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void);
2、每个类可以有多个构造函数;
3、构造函数可以有0个、1个或1个以上的参数;
4、构造函数总是伴随着new操作一起调用,其主要作用是完成对象的初始化工作;
5、构造函数不能被继承,因此,它不能被覆盖,但是构造函数能够被重载。
二、面向对象
1、面向对象与面向过程的区别
面向对象是当今软件开发方法的主流方法之一,它是把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象。
而面向过程是一种以事件为中心的开发方法,就是自顶向下顺序执行,逐步求精
2、面向对象的特征
面向对象的主要特征包括抽象、继承、封装和多态。
1、抽象。抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
2、继承。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
3、封装。封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。
4、多态。多态是指允许不同类的对象对同一消息作出响应。
3、继承的特点
1、Java语言不支持多重继承,但是可以通过实现多个接口来达到多重继承的目的。
2、子类只能继承父类的非私有(public与protected)成员变量与方法。
3、当子类中定义的成员变量和父类中定义的成员变量同名时,子类中的成员变量会覆盖父类的成员变量,而不会继承。
4、当子类中的方法与父类中的方法有相同的函数签名(相同的方法名,相同的参数个数与类型)时,子类将会覆盖父类的方法,而不会继承。
4、多态的实现机制
1、方法的重载(overload)。重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数。
2、方法的覆盖(override)。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。
5、抽象类与接口
1、如果一个类中包含抽象方法,那么这个类就是抽象类。抽象类在使用的过程中不能被实例化。
2、接口就是指一个方法的集合,接口中的所有方法都没有方法体。接口中的所有方法都是抽象的,可以通过接口来间接地实现多重继承。接口中的成员变量都是static final类型
6、this与super有什么区别
1、this用来指向当前实例对象,它的一个非常重要的作用就是用来区分对象的成员变量与方法的形参(当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量)。
2、super可以用来访问父类的方法或成员变量。当子类的方法或成员变量与父类有相同名字时也会覆盖父类的方法或成员变量,要想访问父类的方法或成员变量只能通过super关键字来访问。
三、关键字
1、变量命名规则
在Java语言中,变量名、函数名、数组名统称为标识符,Java语言规定标识符只能由字母(a~z,A~Z)、数字(0~9)、下画线(_)和$组成,并且标识符的第一个字符必须是字母、下画线或$。此外,标识符也不能包含空白字符(换行符、空格和制表符)。
值得注意的是,在Java语言中,变量名是区分大小写的。
2、final、finally和finalize的区别
1、final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖和类不可被继承。
final属性不可变指的是引用的不可变性,即它只能指向初始时指向的那个对象,而不关心指向对象内容的变化。所以,被final修饰的变量必须被初始化。
2、finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定被执行。
3、finalize是Object类的一个方法,在垃圾回收器执行时会调用被回收对象的finalize()方法。
3、static关键字的作用
static关键字主要有两种作用:第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,实现某个方法或属性与类而不是对象关联在一起。
具体而言,在Java语言中,static主要有4种使用情况:成员变量、成员方法、代码块和内部类。
1、static成员变量
Java类提供了两种类型的变量:用static关键字修饰的静态变量和不用static关键字修饰的实例变量。对静态变量的引用有两种方式,分别为“类.静态变量”和“对象.静态变量”。实例变量属于对象,只有对象被创建后,实例变量才会被分配空间,只能用“对象.实例变量”的方式来引用。
2、 static成员方法
static方法是类的方法,不需要创建对象就可以被调用,而非static方法是对象的方法,只有对象被创建出来后才可以被使用。static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法。
3、 static代码块(静态代码块)在类中是独立于成员变量和成员函数的代码块的。它不在任何一个方法体内,JVM在加载类时会执行static代码块,如果有多个static代码块,JVM将会按顺序来执行。
4、 static内部类是指被声明为static的内部类,它可以不依赖于外部类实例对象而被实例化,而通常的内部类需要在外部类实例化后才能实例化。静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法(包括私有类型)。