基础中需要注意的

来源:互联网 发布:大数据促进旅游产业 编辑:程序博客网 时间:2024/06/05 11:09

取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算


如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同


进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的


自加(++)自减(--)运算
     ++:自加。对原有的数据进行+1
     --:自减。对原有的数据进行-1

参与运算使用:
         放在操作数的前面,先自增或者自减,然后再参与运算。
         放在操作数的后面,先参与运算,再自增或者自减。


&&具有短路效果。左边是false,右边不执行。


方法重载:
    在同一个类中,方法名相同,参数列表不同。与返回值类型无关


static关键字的特点
    随着类的加载而加载
    优先于对象存在
    被类的所有对象共享
    可以通过类名调用 ,其实它本身也可以通过对象名调用。推荐使用类名调用。静态修饰的内容一般我们称其为:与类相关的,类成员

    在静态方法中是没有this关键字的

    静态方法只能访问静态的成员变量和静态的成员方法


方法重写注意事项
    1父类中私有方法不能被重写
        因为父类私有方法子类根本就无法继承
    2:子类重写父类方法时,访问权限不能更低
        最好就一致
    3:父类静态方法,子类也必须通过静态方法进行重写
        其实这个算不上方法重写,但是现象确实如此 (静态只能覆盖静态)


打jar包
    选中项目--右键--Export--Java--Jar--自己指定一个路径和一个名称--Finish


StringBuffer和String的区别
    String是一个不可变的字符序列
    StringBuffer是一个可变的字符序列


数组和集合的区别
    区别1 :
         数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
         集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
    区别2:
         数组长度是固定的,不能自动增长
         集合的长度的是可变的,可以根据元素的增加而增长


Map接口和Collection接口的不同
     Map是双列的,Collection是单列的
     Map的键唯一,Collection的子体系Set是唯一的
     Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效


Map集合的功能概述
    1:添加功能
        V put(K key,V value):添加元素。
             如果键是第一次存储,就直接存储元素,返回null
             如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
    2:删除功能
         void clear():移除所有的键值对元素
         V remove(Object key):根据键删除键值对元素,并把值返回
    3:判断功能
         boolean containsKey(Object key):判断集合是否包含指定的键
         boolean containsValue(Object value):判断集合是否包含指定的值
         boolean isEmpty():判断集合是否为空
    3:获取功能
         Set<Map.Entry<K,V>> entrySet():
         V get(Object key):根据键获取值
         Set<K> keySet():获取集合中所有键的集合
         Collection<V> values():获取集合中所有值的集合
    4:长度功能
         int size():返回集合中的键值对的个数

异常

1异常注意事项
    子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
    如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
    如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
2如何使用异常处理
    原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
    区别:
        后续程序需要继续运行就try
        后续程序不需要继续运行就throws
        
    如果JDK没有提供对应的异常,需要自定义异常。


多线程两种方式的区别

    1.继承Thread : 由于子类重写了Thread类的run(), 当调用start()时, 直接找子类的run()方法
    2. 实现Runnable : 构造函数中传入了Runnable的引用, 成员变量记住了它, start()调用run()方法时内部判断成员变量Runnable的引用是否为空, 不为空编译时看的是Runnable的run(),运行时执行的是子类的run()方法
    
 继承Thread
     好处是:可以直接使用Thread类中的方法,代码简单
     弊端是:如果已经有了父类,就不能用这种方法
 实现Runnable接口
     好处是:即使自己定义的线程类有了父类也没关系,因为有了父类也可以实现接口,而且接口是可以多实现的
     弊端是:不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方法,代码复杂


    Vector是线程安全的,ArrayList是线程不安全的
    StringBuffer是线程安全的,StringBuilder是线程不安全的
    Hashtable是线程安全的,HashMap是线程不安全的