java基础知识

一.基本数据类型

基本元素类型大小最小值最大值包装器类型默认值
boolean---Booleanfalse
byte8 bit-2^(8-1)2^(8-1)-1Byte0
char16 bitUnicode 0Unicode 2^16-1Characternull
short16 bit-2^(16-1)2^(16-1) -1Short0
int32 bit-2^(32-1)2^(32-1)-1Integer0
long64 bit-2^(64-1)2^(64-1)-1Long0L
float32 bitIEEE 754IEEE 754Folat0.0f
double64 bitIEEE 754IEEE 754Double0.0d
void-----
高精度数字可表示任何精度的整数--BigInteger-
高精度数字可表示任何精度的整数--BigDecimal

二.操作符

位操作符:
操作整数基本元素类型中的单个bit,即二进制位。

操作符
与 &       1&1 = 11&0 = 0       0&0 = 0       操作位有0,结果则为0
或 |1|1 = 11|0 = 10|0 = 0操作位有1,结果则为1
异或 ^1^1 = 01^0 = 10^0 = 0操作位一样,结果为0,否则为1
非 ~~1 = 0~0 = 1
左移 <<(60 << 2) = (0011 1100 << 2) = 1111 0000 = 240                              低位补0
右移 >>(60 >> 2) = (0011 1100 >> 2) = 0000 1111 = 15
省略符号位:
(-60 >> 2) = (0011 1100 >> 2) = 0000 1111 = 15
取反加1:1100 0100
移位补位:1111 0001
取反加1:0000 1111
正符号:右移,高位插入0;
负符号:符号位不变,取反低位加1,然后右移,高位插入1。最后保留符号位,按位取反低位加1。

如果对char,byte,short进行移位操作,将会先转换成int类型,再进行移位。

三.异常

Error:编译时和系统错误,比如:OutOfMemoryError
Exception:可被抛出的基本类型异常。通常分为两类:
1.检查时异常,此类异常通常需要强行进行try…catch处理或者throws抛出异常,在别处进行try…catch处理。否则编译不过。比如:SQLException ,IOException 。
2.运行时异常,多数继承自RuntimeException,不强制进行try…catch处理。比如: NullPointerException,IllegalStateException, ClassCastException,SecurityException等。

这里写图片描述

异常的处理方式:

1.try…catch…finally处理

finally部分可有可无,如果有使用文件读取、网络操作以及数据库操作等,一般建议在finally的代码块中释放资源。

            try {
                FileInputStream inputStream = new FileInputStream("d:/test.txt");
                int ch = inputStream.read();
                System.out.println("try is running");
            } catch (FileNotFoundException e) {
                System.out.println("file not found");
            }catch (IOException e) {
                System.out.println("io exception");
            }finally{
                System.out.println("finally");
            }

2.throws,抛出异常,交给调用者处理。

此方法抛出的异常,如果是RuntimeException ,则不需要调用者强行try…catch。如果是非RuntimeException ,则调用者需要强行捕获此异常,否则编译不过。

    public void readXML() throws Exception{
        FileInputStream inputStream = new FileInputStream("d:/test.txt");
        int ch = inputStream.read();
        //...
    }

当然,我们也可以在代码中主动抛出异常,throw new Exception(),这个需要结合throws使用,比如:
throws抛出的异常必须要比throw 抛出的异常范围大,否则编译不过。

    public void readXML() throws Exception{
        FileInputStream inputStream = new FileInputStream("d:/test.txt");
        int ch = inputStream.read();
        //...
        throw new IOException();
    }

关于子类重写父类的方法时,异常的处理方式:
  1)父类的方法没有声明异常,子类在重写该方法的时候不能声明异常;

  2)父类的方法中声明的异常范围要比子类的方法中声明的异常要大。

  3)如果父类的方法声明的异常类型只有非运行时异常(运行时异常),则子类在重写该方法的时候声明的异常也只能有非运行时异常(运行时异常),不能含有运行时异常(非运行时异常)。
  
finally和return

无论try中是否有return,finally中的代码块是肯定是要执行的。如果try和finally中都含有return语句,那么会护理try中的return语句而执行finally中的return。如下:

public class Test {

    public static void main(String args[]) {
        Test t = new Test();
        System.out.println("main  i = "+t.print());
    }

    public int print() {
        int i = 0;
        try {
            i++;
            System.out.println("try   i = "+i);
            return i;
        } catch (Exception e) {
            i++;
            System.out.println("catch   i = "+i);
        } finally {
            System.out.println("finally   i = "+i);
            return ++i;
        }
    }
}

输出的打印如下:

try   i = 1
finally   i = 1
main  i = 2

参考:https://blog.csdn.net/stduent_/article/details/60955365

四.接口和继承

https://www.cnblogs.com/dolphin0520/p/3811437.html

五.多态

多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。

方法绑定:https://www.cnblogs.com/jstarseven/articles/4631586.html

五.初始化

对象创建时,初始化过程:
1.java解释器查找类路径,定位class文件。(静态方法/静态域被首次访问时,或者首次创建对象时,因为构造器实际上也是静态方法)
2.载入class文件,静态初始化。(静态初始化只有在class对象首次加载时进行一次)
3.new创建对象时,在堆上为对象分配足够的存储空间
4.在此对象的存储空间内,将对象中的所有基本类型设置默认值,引用类型设置为null
5.执行所有出现于字段定义处的初始化动作
6.执行构造器。

六.类的加载编译运行过程

https://www.cnblogs.com/fefjay/p/6305499.html

七.内存分配

http://www.cnblogs.com/dolphin0520/p/3613043.html

八.垃圾回收机制

http://www.cnblogs.com/dolphin0520/p/3613043.html

https://www.cnblogs.com/andy-zcx/p/5522836.html

九.内部类

http://www.cnblogs.com/dolphin0520/p/3811445.html

十.反射

类型信息在运行时是由class对象来表示的。Class包含了类有关的信息,每一个类都有一个Class对象,JVM运行java文件生成class文件时,就生成了Class对象。
获取Class对象的引用:
1.forName()方法:

public static Class<?> forName(String className)

2.类字面常量:

  类名.class

建议使用此类型,因为它在编译时就会接受检查。

运行时识别对象和类的信息,主要有两个方式:

1.传统的RTTI(Run-Time Type Identification),运行时类型识别。假设在编译时已经知道了所有类型。

传统的RTTI一般由继承和多态来实现,在运行时通过调用超类的方法来实现具体的功能。

传统的RTTI有3种实现方式:

1) 向上转型或向下转型(upcasting and downcasting),在java中,向下转型(父类转成子类)需要强制类型转换
2) Class对象(用了Class对象,不代表就是反射,如果只是用Class对象cast成指定的类,那就还是传统的RTTI,因为cast()方法使用了isInstance()方法判断类型)
3) instanceof或Class类定义的方法isInstance()

2.反射机制,在运行时发现和使用类的信息。

传统的RTTI方式可以让我们在运行时识别对象的类型。但是这个是在编译器已经知道了所有类型的基础下,即已经生成了.class文件。如果我们获取了一个对象的引用,但是编译器不知道这个对象所属的类,即没有生成.class文件,这个时候就需要使用反射机制了。
Java不允许在运行时改变程序结构或类型变量的结构,但它允许在运行时去探知、加载、调用在编译期完全未知的class,可以在运行时加载该class,生成实例对象(instance object),调用method,或对field赋值。这种类似于“看透”了class的特性被称为反射(Reflection)
Class类与java.lang.reflect类库一起对反射的概念进行了支持。

https://www.cnblogs.com/zhguang/p/3091378.html

十一.IO系统

IO: https://blog.csdn.net/suifeng3051/article/details/48344587

NIO:
https://blog.csdn.net/suifeng3051/article/details/48344587

https://blog.csdn.net/suifeng3051/article/details/48441629

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值