注:本文是博主根据自身学习java语言的经历,结合互联网上各论坛、网站对java知识点的总结,所做的一次学习笔记记录。主要记录java编程语言的一些易忽视的基础知识点,以及笔试面试时常被问到的细节。本人常期用c/c++编程,java方面水平有限,高手勿喷,欢迎评论指正。
----------
1 方法出现的顺序不会影响编译过程,程序运行时都是从main函数开始的。
2 Java语言的数据类型是强类型,意味着每一个变量都必须明确声明数据类型。
3 基本类型
布尔类型:boolean 占1字节
字符类型:char 占2字节
整型:byte 占1字节 short 占2字节 int 占4字节 long 占8字节
浮点型:float 占4字节 double 占8字节
4 char型采取的是是Unicode全球统一编码,支持任何世界上官方的语言中的字符。
5 因为java中采取Unicode字符集,所以任何的Unicode中的字符都可以作为标识符的名称,但考虑字符集的支持问题推荐还是使用英文字母命名。
6 原码,反码,补码
原码:将数字转换为二进制,第一位为符号位,正数为0,负数为1。
反码:正数的反码和原码相同,负数的反码将原码符号位之外的位逐位取反。
补码:正数的补码和原码相同,负数的补码将反码加1。
最后强调一点,计算机存储数据用补码形式来存储。
7字符串不是基本类型,String是java.lang包中的一个类,是引用类型的,8种基本类型中没有一个是String类型。
8 String s = “”;和String s = null;的区别:第一个表示s被赋值,指向了一个字符串对象,第二个表示s没有指向任何对象实例,是真空。
9 判断字符串内容相同用equals方法判断,==只能判断引用是否相同。
10 提供用户输入使用javav.util.Scanner类
Scannersc=new Scanner(System.in);
X=sc.nextInt();
Y=sc.nextDouble();
Z=sc.next();
T=sc.next().charAt(0);
11 以下创建数组对象都是合法的:
int[] a = new int[3];
int[] a = {1,2,3};
int[] a = new int[] {1,2,3};
12 得到数组长度用length属性,得到字符串长度才有length()方法。
13 java.util.Arrays类提供了很多关于数组的实用方法。
14 类之间的3种关系:依赖关系(uses-a)、聚集关系(has-a)、继承关系(is-a)。
15 一个java源文件可以写多个类,但必须只能有一个公有类,并且文件名和公有类的类名相同。
16 类中有属性(数据域),方法,构造器(构造方法)。
17 一个构造器调用另外一个构造器需要用this()语法调用,需要注意的是调用语句必须是构造器中的第一句。
18 实例成员和静态成员的区别
实例成员:是属于对象实例的,用对象.成员名称语法调用
静态成员:和对象实例无关,是属于类本身的,用类名.成员名称语法调用
19 静态初始化块statci{}的执行时机是在类被加载的时候,仅执行一次。
20 包实际上就是物理上的文件夹,可以把类放到不同的包中。
21把一个类放到包中,需要在类中需要加上包声明package语句,必须写在源文件的第一句。
22 当使用的类和当前类并不在同一个包中的时候,用import语句导入。
23 java中java.lang包中的类是自动导入的。
24完整类名:顶层包名.子包名.类名。
25局部变量和全局变量的区别
区别 |
局部变量 |
全局变量 |
声明位置 |
方法或块内部 |
方法外类内部 |
访问权限修饰符 |
没有访问权限 |
有访问权限 |
默认值 |
没有默认值 |
有默认值 |
使用形式 |
直接使用 |
对象调用 |
作用域 |
在方法或语句块内部 |
整个类 |
生命周期 |
进入方法或语句块创建退出方法或语句块销毁 |
随着对象的创建而创建随着对象的销毁而销毁 |
26 超类中申明为private时,用super调用超类的构造函数,super方法的代码必须位于子类构造函数的第一行。
27 子类可以继承父类的数据域(属性),方法,但构造器不能继承。
28 多态:存在具有相同名称的不同方法。
29 重写:子类的方法具有与超类中相同的方法名,但是具有不同的行为。
30 私有成员能被子类继承,但是由于访问权限的控制,在子类中不能直接使用父类的私有成员。
31 Object是所有类的根类,任何类如果没有写显式的继承语句,默认都是直接继承Object类的。
32 java中是单继承,一个子类只能有一个父类。
33 访问权限修饰符有有四种:
private:私有,只能在被类中被访问
default:默认,只能被同一个包中的类访问
protected:受保护的,只能被同一个包中的类和不同包中的子类访问
public:公有,可以被任何类访问
34 覆盖方法的规则
方法名相同
方法的参数类型,个数,顺序至少有一项不同
方法的返回类型和修饰符均不受限制
35 this和super作用
this:本身代表当前的对象引用,可以用this.成员名称调用当前对象的属性和方法,如果属性和局部变量重名,可以用this.属性名和局部变量区分开。也可以用this()语法调用本类重载构造器。
super:本身是一个特殊关键字,可以用super.成员名称调用从父类继承的属性和方法,也可以用super()语法调用父类构造器。
36 多态对象只能使用父类的成员,但如果多态对象使用了被子类覆盖的方法,则会动态绑定使用子类的成员,称为虚拟方法调用。
37 instanceof操作符是作什么用处的?
可以判断一个对象的类型是否是某一个类的类型或子类,也可以判断这个对象的类型是否是一个接口的实现类。
38 toString方法在打印语句中传入引用类型的对象或者对象和字符串作连接时会自动被调用。
39 覆盖equals方法和hashCode方法必须保证当两个对象equals比较为true的时候,返回的hashCode相同,当比较为false的时候,返回的hashCode不同。
40 java中有8个包装类,正好对应8种基本数据类型。
分别是:BooleanByte Short Integer Long Character Float Double
41 装箱和拆箱
装箱指的是把基本类型包装成包装类的引用类型
拆箱指的是把包装类形式的引用类型转换为基本类型
Integer intObj = 10;//自动装箱
int i = intObj + 5;//自动拆箱
42 final修饰符
final修饰符可以修饰类,方法,变量
final类为最终类,不能被子类继承
final方法为最终方法,不能被子类覆盖
final变量为常量,只能赋一次值
43 abstract修饰符
abstract修饰符可以修饰类和方法。
abstract类为抽象类,是不能创建对象的。
public abstract class Employee{};
abstract方法为抽象方法,只有方法的声明,没有具体的实现。
需要注意的是:
有抽象方法的类一定是抽象类,抽象类不一定有抽象方法,抽象类也有构造器,但不能创建对象实例。
44 abstract不能和private,static,final一起使用。
45 可以在非抽象方法中调用抽象方法,模板方法设计模式就是典型的这种调用。
46泛型的主要特点是类型参数化,后期绑定数据类型。
47泛型不支持基本类型,只支持引用类型。
48 接口中的成员中数据域必须是(public static final修饰)公有静态常量,方法必须是(public abstract修饰)公有抽象,没有构造方法。
49 接口和类之间是实现关系,一个类用implements语句实现了某接口,这个类被称为接口的实现类,一个类可以实现多个接口,一个类实现了某接口,必须覆盖这个接口中的所以方法,否则这个类必须是个抽象类。
50 内部类可以分成,实例内部类:声明在方法外边没有static修饰符;静态内部类:声明在方法外边有static修饰符;局部内部类:声明在方法里边。
如何在实例内部类中访问外部类的成员?
在实例内部类中可以直接使用外部类的成员,不需要创建外部类的对象实例,但是如果在内部类中的成员名称屏蔽隐藏了外部类的成员(即外部类和内部类的成员名相同),则需要用”外部类名.this.成员名”访问外部类成员
51 异常处理
异常的对象的根类是Throwable类,Throwable类分成Error类和Excepion类两个分支
Error类表示严重错误,Exception类表示可以在程序中处理的错误。
52 Exception类分成运行时异常和非运行时异常(已检查异常),运行时异常编译不检查,在运行时才会发生异常;已检查异常编译时就会作检查,不处理异常则通不过编译。
53 处理异常代码finally语句在任何时候都会执行,不管有没有发生异常。
54 覆盖方法不能比父类方法抛出更多异常。
55 字符串String是不可变类,一经创建就不能修改其内容了。
字符串的常用方法有:
charAt方法:可以返回指定位置的字符。
substring方法:可以截取子字符串。
length方法:返回字符串长度。
indexOf方法:查找子串的位置。
lastIndexOf方法:反向搜索子串的位置。
replaceAll方法:替换字符串。
split方法:分解字符串。
toLowerCase, toUpperCase方法:字符串大小写转换。
56 StringBuffer是可变类,String是不可变类,StringBuffer类是线程安全的,StringBuilder类是线程不安全的。
57 Set集合和List集合共同的父接口是Collection集合。
Set: Collection的子接口,不记录元素的保存顺序,且不允许有重复元素。
List: Collection的子接口,记录元素的保存顺序,且允许有重复元素。
58 ArrayList和LinkedList有什么不同
ArrayList 的内部实现是基于内部数组Object[],所以从概念上讲它更像数组。
LinkedList的内部实现是基于一组连接的记录,所以它更象一个链表结构,所以它们在性能上有很大的差别。
ArrayList 随机访问比较块,但插入和删除元素比较慢,LinkedList但插入和删除元素比较快,但随机访问比较慢。
59 HashTable是线程安全的,HashMap是线程不安全的
60 Vector是线程安全的ArrayList是线程不安全的
61 FileInputStream文件输入字节流,FileOutputStream文件输出字节流,FileReader文件输入字符流,FileWriter文件输出字符流。如果是纯文本文件应该用字符流,如果是二进制文件应该用字节流。
62 线程有有四种状态,分别是:新生状态,可运行状态,阻塞状态,死亡状态。
63 线程的同步需要用什么方法
旧的方法是用synchronized关键字
新的方法是用ReentrantLock类的lock和unlock方法
******************
作者:hao_09
时间:2015/8/8
文章地址:http://blog.csdn.net/lsh_2013/article/details/47361779
******************