Java基础知识整理

  1. Java中基本的编程单元为类。

  2. 有关java的一些细节问题:构造方法不需要同步化、一个子类可以覆盖掉父类的同步方法、容器保存的是对象的引用。

  3. 对于子类的构造函数说明:
    (1)java继承中对构造函数是不继承的,只是显式或者隐式调用。
    (2)子类中调用父类构造函数不可以直接书写父类构造函数,而应该用super();。
    (3)子类的构造函数中可以调用其他函数。
    (4)创建子类的对象的时候,若子类构造函数没有显式调用父类构造函数,就会先调用父类的无参构造函数;若是在子类的构造函数显式调用了父类的构造函数(包括有参的可以),则会先调用刚刚显示调用的父类构造函数。

  4. 如果希望监听TCP端口9000,服务器端应该这样创建 socket :new ServerSocket(9000);

  5. 关于运行时常量池,说法正确的是:
    (1)运行时常量池大小不受栈区大小的影响。
    (2)运行时常量池大小受方法区大小的影响。
    (3)存放了编译时期生成的各种字面量。
    (4)存放编译时期生成的符号引用。

  6. 可以取到http请求中的cookie值的方法:request.getHeader、request.getCookies。

  7. 初始化执行代码顺序:
    (1)在初次new一个Child类对象时,发现其有父类,则先加载Parent类,再加载Child类。
    (2)加载Parent类:
    初始化Parent类的static属性,赋默认值;
    执行Parent类的static初始化块;
    (3)加载Child类:
    初始化Child类的static属性,赋默认值;
    执行Child类的static初始化块;
    (4)创建Parent类对象:
    初始化Parent类的非static属性,赋默认值;
    执行Parent类的instance初始化块;
    执行Parent类的构造方法;
    (5)创建Child类对象:
    初始化Child类的非static属性,赋默认值;
    执行Child类的instance初始化块;
    执行Child类的构造方法;
    后面再创建Child类对象时,就按照顺序执行(4)(5)两步。

  8. JAVA的初始化顺序:父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法
    (1)静态成员和静态代码块只有在类加载的时候执行一次,再次创建实例时,不再执行,因为只在方法区存在一份,属于一整个类。
    (2)上述的是通用的加载顺序,如果没有则省略。

  9. 可以把任何一种数据类型的变量赋给Object类型的变量。引用类型都直接或间接继承自Object,基本类型 在赋值时都会 先自动装箱成其相对应包装类型,然后赋值。

  10. (1)关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块。
    (2)多线程访问volatile不会发生阻塞,而synchronized会出现阻塞。
    (3)volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步。
    (4)关键字volatile解决的下变量在多线程之间的可见性;而synchronized解决的是多线程之间资源同步问题。

  11. true、false、null都不是关键字;goto、const、是保留的关键字。

  12. 在使用super 和this关键字时要注意一下几点:
    (1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
    (2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
    (3)super()和this()均需放在构造方法内第一行。
    (4)尽管可以用this调用一个构造器,但却不能调用两个。
    (5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
    (6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
    (7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

  13. Object类中的方法:clone()、toString()、wait()、finalize()。

  14. 需要定义一个类,哪些修饰符是允许被使用:
    (1)普通类(外部类):只能用public、default(不写)、abstract、final修饰。
    (2)(成员)内部类:可理解为外部类的成员,所以修饰类成员的public、protected、default、private、static等关键字都能使用。
    (3)局部内部类:出现在方法里的类,不能用上述关键词来修饰。
    (4)匿名内部类:给的是直接实现,类名都没有,没有修饰符。

  15. 在java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
    (1)给对象赋值为null,以下没有调用过。
    (2)给对象赋了新的值,重新分配了内存空间。

  16. java语言是强类型语言,支持的类型分为两类:基本类型和引用类型。
    (1)基本类型包括boolean类型和数值类型,数值类型有整数类型和浮点类型。整数类型包括:byte、short、int、long和char;浮点类型包括:float和double
    (2)引用类型包括类、接口和数组类型以及特殊的null类型。

17.自动类型转换遵循下面的规则:
(1) 若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
(2)转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。
(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
(4)char型和short型参与运算时,必须先转换成int型。
(5)在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
下图表示了类型自动转换的规则:
在这里插入图片描述
18. 引用数据类型是引用传递(call by reference),基本数据类型是值传递(call by value)
(1)值传递不可以改变原变量的内容和地址;
(2)引用传递不可以改变原变量的地址,但可以改变原变量的内容;

  1. 常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值