JAVA基础(更新中)

        先唠叨两句,如果说java基础,可能平时觉得每个语言,都差不多就那些、定义类型、if、for 就可以基本上解决基本程序问题,可深究下去总有一些知识需要我们注意数据类型缓存、传递值和传递引用、String的操作、尽量把我平时遇到的问题和特别需要注意的点用特别字体标记出来,有些知识点有的博客总结的已经很好了,我也只复制链接分享了。

    先分享个博客:https://blog.csdn.net/thinkwon/category_9379953.html 知识点整理的很系统很完善,我的整理也借用其中,偷点懒

       分享一本书:《java编程思想》 这本书开始觉得很厚读起来容易犯困,但还是真值得一读,打基础必备

     了解更多JAVA后台知识整理:JAVA后台系列目录

 1. 数据类型

            基本数据类型

                    先上一个表,大家都知道这个表,最初我只是认为就是一些字节和取值范围默认值,可怎么用呢                    

                   Java基本数据类型

                    1. 在网络上socket传输中:如何把字节转成字符串、如何把字节转成整型、数据存储的大小端是什么、整型转成字节等等

                    2. 运算中:double运算会出现0.9999999999这种类型的数据,我们在计算浮点类型时要使用 BigDecimal进行类的运算

                                       在存在整型和浮点型的运算结果可能不一样、数据类型不同导致

                    3. 大小问题: 1Byte=8bit(位是计算机内部数据储存的最小单位)在某些时候我们要利用上这些知识点进行数据流量计算

                    4. 默认值就是在不给值情况系统初始化的值、不要认为是null

            包装数据类型

                     基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使⽤用⾃自动装箱与拆箱完成。

            缓存池

                   面试中的场景

                    new Integer(123) 与 Integer.valueOf(123) 的区别在于:
                    new Integer(123) 每次都会新建⼀一个对象;
                    Integer.valueOf(123) 会使⽤用缓存池中的对象,多次调⽤用会取得同⼀一个对象的引⽤用。

                   在 jdk 1.8 所有的数值类缓冲池中,Integer 的缓冲池 IntegerCache 很特殊,这个缓冲池的下界是 -128,上界默认是 127,但是这个上界是可调的,在启动 jvm 的时候,

                   通过 -XX:AutoBoxCacheMax=<size> 来指定这个缓冲池的⼤大⼩小,该选项在 JVM 初始化的时候会设定⼀一个名为java.lang.IntegerCache.high 系统属性,

                   然后 IntegerCache 初始化的时候就会读取该系统属性来决定上界。

2.      String类型

          在聊String前:我先要聊下 “==” 和 .equals(),这里面可以搞出很多面试题

           记不得文章是啥了,先用截图去找找

         

          .equals方法:主要是null值的问题,在写代码中要注意

          String 被声明为 final,因此它不不可被继承。(Integer 等包装类也不不能被继承)

          java8 之前用的char数组存储、java9变成了byte存储、并增加相应的字符编码、java8以后收费,而且java8已经很好用了,所以了解下就ok

          String, StringBuffer and StringBuilder(线程安全的)

3.  转义字符

            在正则中很是有用,"1111".replace("","") "222,333".split("")使用的都是正则

           常见转义字符表

4. 运算符

       参考博客:https://thinkwon.blog.csdn.net/article/details/101649002

       在编程过程中常用到的运算  i+=1 相当于 i=i+1 , && 、|| 、<< 、三元运算符、这些年从事的基本业务开发、运算上遇到的问题多半都是精准度的问题,

5. 关键字

       参考博客:https://thinkwon.blog.csdn.net/article/details/101642385

        java编程中,保留了一些关键字,命名的时候需要注意,至于命名规范多参考下阿里巴巴命名规范、idea开发工具中还有开发插件提供使用。

        在使用mybatis时候,写mapper文件、要注意有些关键字虽说不是java中的,但是是数据库中的、在写数据对象时候尽量规避这些关键字,例如 desc

6. object中的方法

        面试中常常会问聊聊你熟悉的object中的方法,并针对一些重要的方法做了标记,有兴趣可以去了解

        protected Object clone() 创建并返回此对象的一个副本。 
        boolean equals(Object obj) 指示某个其他对象是否与此对象“相等”。 
        protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 
        Class<? extendsObject> getClass() 返回一个对象的运行时类。 
        int hashCode() 返回该对象的哈希码值。 
        void notify() 唤醒在此对象监视器上等待的单个线程。 
        void notifyAll() 唤醒在此对象监视器上等待的所有线程。 
        String toString() 返回该对象的字符串表示。 
        void wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。 
        void wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。 
        void wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的 notify()

7. 泛型

        相信大家看代码中总会看到List<T> <E>这样的字符,这就是泛型的表现形式,

        泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型

         通配符 ? List<?>

        类型擦除:Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节代码中是不包含泛型中的类型信息的

 

8. 反射

        反射可以做什么,可以从xml中解析出对象这是我开发中用到最多的方式了,在接口开发中相当重要,具体方法就不写了参考下博客

        反射方法用途参考博客:https://thinkwon.blog.csdn.net/article/details/100128361

        把一个xml用反射机制搞成对象,这个反射学的也就差不多了

 

9. 异常

         

          Error : 属于程序不能处理的错误

          Exception:异常、可以捕获处理

          在开发过程中常见异常:空指针异常(这个很重要而且最常见)、数组越界(解析过程中常常碰见)

                                                  类型转换异常、RuntimeException(处理spring事务时要抛出该异常)

          在开发过程中可以通过抛出捕获异常最相关处理           

          异常涉及常用关键字 try、catch、throw、throws、finally

 

10.注解

          注解相信使用过spring框架之后,都会觉得这玩意比配置文件不知道好用多少, 一个注解简化了代码

                注解包括:@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查
            元注解包括:@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@Documented(标明是否生成javadoc文档)
            自定义注解:可以根据自己的需求定义注解

          注解是不支持继承的

          想深入学习注解,就动写一个注解,就ok了
       

11. 序列化

        序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。
        可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。
        序列化是为了解决在对对象流进行读写操作时所引发的问题。
        反序列化的过程,则是和序列化相反的过程。

       将需要被序列化的类,实现 Serializable 接口,就可以把该类序列化

       对于不想进行序列化的变量,使用 transient 关键字修饰

       在RPC调用中一定要将对象序列化,否则传输不过去


12. 复制

        直接赋值:属性赋值

        浅复制:只复制基本类型值,引用类型无法复制,比如属性是list,spring中那个复制就是浅复制

        深复制:复制一切

 

13.内部类

      成员内部类、局部内部类、匿名内部类和静态内部类。

      在过去项目中有用到过,但我很少主动用内部类,不知道为啥,可能感觉太乱了

      场景:

       一些多算法场合
       解决一些非面向对象的语句块。
       适当使用内部类,使得代码更加灵活和富有扩展性。
       当某个类除了它的外部类,不再被其他的类使用时

       还是有优点的:

       一个内部类对象可以访问创建它的外部类对象的内容;内部类不为同一包的其他类所见,具有很好的封装性;
       内部类有效实现了“多重继承”,优化 java 单继承的缺陷; 匿名内部类可以很方便的定义回调

 

14.三大特性

       封装、继承、多态 这感念做多了重在理解,coding的越多,就越觉得这三大特性的厉害

       就是这几个特性,使Java可以动态调用时执行

 

15. 类的执行顺序

           这个需要了解下,在看代码的时候很有用

       

 

 了解更多JAVA后台知识整理:JAVA后台系列目录

      

 

 

 

       

    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值