Java基础从“int a = 3;“开始总结

Java知识思维导图

 一、数据类型

        int 在Java中属于基本数据类型

1.基本数据类型       

        1. int类型

                长度:4字节,32位

        2.byte类型

               长度:1字节,8位

        3.short类型

               长度:2字节,16位

        4.long类型

               长度:8字节,64位

        5.float类型

               长度:8字节,64位

        6.double类型

               长度:8字节,64位

        7.char类型

               长度:2字节,16位

        8.boolean类型

               长度:1字节,8位或者4字节,32位

2. 类型转换

                1.自动类型转换

                2.强制类型转换

                3.具有继承关系的类之间的自动类型转换与强制类型转换

3.包装器

        1.装箱

        2.拆箱

        3.128陷阱

                这个问题源于自动装箱时的,Integer.valueOf()函数的源码,详情可以看我之前写的博客

        4.基本数据类型与包装类之间的对应关系

4.易忘的操作符

        1.“=”赋值运算符

                Student student = new Student();

                理解:

                        1.新建一个Student类型对象,将其赋值给student;

                        2.声明student变量将其指向新建的Student对象  

                        

        2.按位操作符

        3.三元运算符

                语法:布尔表达式?value0,value1

                若表达式为真,返回value0

                若表达式为假,返回value1

public static void main(String[] args){
		System.out.println(1 == 2 ? "我是对的" : "你是对的");
	}

        输出结果为 我是对的 

        4.与,或,异或

  • & 与运算: 遇 0 则为 0, 全1 则为 1
  • | 或运算: 遇 1 则为 1, 全 0 则为 0
  • ^ 异或运算: 相异为1

        5.引用数据类型

                1.不可变类型

                    1. String

一旦对字符串操作,就会产生一个新的String对象

  • Java为什么使用不可变字符
    • 好处:可以共享

Java如何保证String的不可变?

  • final修饰String类,保证String类无法被继承
  • final修饰Char数组,保证该数组的地址无法被修改,该数组一旦被赋值就无法改变
  • String类中没有任何一个修改Char数组的方法,保证String类中的Char数组无法被修改
        2.提升字符串拼接效率的两个类

1.StringBuffer
  • 保证线程安全
    • 原因:方法加了锁(synchronized)
      • 2.StringBuilder
        • 不能保证线程安全

                2.可变类型

                        我们创建的大部分类

        6.Object(Java所有类的基类)

               

  • equals()和“==”的区别

  • 1.基本类型只有“==”

  • 2.对象使用equals()
    • 若未重写equals方法,则会调用Object的equals方法也就是“==”
    • 若重写了equals方法,就会按照重写的规则进行比较
  • 若想把某个类的对象作为hashmap的key需要注意什么
  • 为什么在重写equals方法时要重写hashcode方法
  • 什么情况下要重写hashcode方法
    • 1.equals()对象的作用,是确定两个对象是否相等
    • 2.在HashMap和HashSet中对象的位置,是通过HashCode值确定的,所以两个对象如果相同的话他们应该出现在HashMap和HashSet的相同位置,而如果不重写HashCode,则不能保证其出现的位置相同,导致逻辑上出现矛盾,也就不能证明两个对象是相等的,所以需要重写HashCode方法

                

二、关键字

        1.final关键字

        

修饰类该类无法被继承
修饰方法该方法无法被重写
修饰域(代码块)这个域无法被赋值

        2.static

                static(静态的),被static修饰的归类(class)所有 ,

                所有的该类创建的对象,共享着一份数据(静态方法,静态变量,静态代码块)

                静态方法通过 类名.方法()的形式来调用

        3.访问权限修饰符

修饰类

修饰方法

修饰域

public

公共类

private

私有类,常见于内部类

该方法只能在本类中使用,不会在其他类中访问

该方法只能在本类中使用,不会在其他类中访问

protected

子类可以访问,继承,同包下的类可以访问

子类可以访问,继承,同包下的类可以访问

default

只有同包的可以访问

只有同包的可以访问

若子类和父类不在同一个包中,子类可访问父类的protected成员,不能访问父类对象的

三、面向对象

        1.封装

                最简单的可以体现在:get(),set()方法,用来访问私有变量

                可以用来隔离非法数据

        2.继承

                父类的public都被子类继承,private不会被继承

                好处

                        提高了代码的复用性,和维护性

                弊端 

继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类也不得不跟着变化,削弱了子类的独立性

        3.多态

        多态是指当父类引用引用的对象不一样的时候表现出的行为是不一样的

                例子:

                        接口和各个实现类

                        抽象类和各个子类 

                        List a = new ArrayList()

                        List a = new LinkList()

                        void method(List A);

                        调用的时候可以是

                        method(ArrayList A);或者是method(LinkList A);

                        这里与动态绑定相关,因为虽然形参类型为List,不过只有到真正调用运行程序的时候才能真正知道,具体的是LinkList类型,还是ArrayList类型

                 多态的条件

                

  • 必须在继承体系下
  • 子类必须要对父类中的方法进行重写
  • 通过父类的引用指向子类对象,调用重写的方法

四、main方法

        是java程序的唯一入口

五、输入输出

六、抽象类和接口

        1.联系和区别

        2.abstract关键字

        3.现在接口里面也可以有默认方法了,default修饰

七、反射

        获得一个类

                所有的构造函数

                所有的域

                所有成员变量

                所有的方法

        对于方法可以执行

        对于变量可以赋值

        暴力反射

        在各个框架中的应用

八、代理

        静态代理

        动态代理

                jdk动态代理

                cglib动态代理

        在各个框架中的应用,主要是在aop中,mybatis(使用xml,中的sql语句调用数据库)中

九、异常体系

        1.Error

                例如内存溢出

        2.Exception

                 1.RutimeException

             空指针:例如Service上没加注解  dao上没加@Autowired

         运行时异常的解决方案:先判断,再使用,所有的runtimeException都是,可以通过代码来处理的,所以在代码运行中,一旦遇到了runtimeException,那么肯定是我们的程序考虑不到位

        例如:判断除数是否为零,对于数组大小为10的数组下标是否越界

                2.IOException

          例如:读取、写入时某个文件不存在,这种异常取决于环境,不是我们通关简单的提前判断就可以解决的,举个例子,假如在你判断文件是否存在的时候文件是存在的,可是下一瞬间,你或者其他人将文件删除了,那么提前判断自然就没用了

        所以对于IoException我们要使用try-catch给它包起来,或者通过throws关键字把异常抛出去

        3.通过继承产生的自定义异常类 

十、泛型

                java中的泛型是假的,落实到我们的类之后,就会变成Object数组

                但是泛型具有编程上的意义,它可以决定我们允许哪些类型进来,有一个强制的限定但是你是无法获得T、E类型的class,只能借助传递进来的变量.getclass()

十一、集合

        1.List

                1.ArrayList()底层是数组实现

                2.LinkList()底层是链表实现

        2.Set

                存的是不重复的元素的集合

                TreeSet

                HashSet

        3.Map

                HashMap

                TreeMap

                LinkedHashmap        

                        借助LinkedHashmap实现LRU(最近最少使用)

        4.线程安全的相关集合

                

  • 27
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值