zoukankan      html  css  js  c++  java
  • Java学习笔记

    1、类对象obj.getClass()和类的对象obj的区别

     2、

    方法多态里:只能调用调用子类里重写父类的方法或者是继承父类的方法,不能是子类独有的方法

     

     3、

     基本数据类型转换

     基本数据类型:

      byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128(-2^7)~127(2^7-1),默认值0

      short:短整型,在内存中占16位,即2个字节,取值范围-32768(-2^15)~32767(2^15 - 1),默认值0

      int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围--2,147,483,648(-2^31)~2,147,483,647(2^31 - 1),默认值0

      long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L

      float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

      double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

      char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

      boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false

      默认转换:byte,short,char--int--long--float--double

                        byte,short,char 相互之间不转换,他们参与运算首先转换为Int类型

    Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

    参考地址:https://www.cnblogs.com/zwakeup/p/7420142.html

    Animal animal = new Dog();
    Dog dog = (Dog) animal;
    dog.eat();

     上面这个例子就是引用类型里的强制类型转换,因为animal的引用本身就是指向子类Dog

    4、

    抽象类规定子类必须实现哪些方法,但它不关心如何实现

    5、

    Java世界中,类是单继承的,接口是可以多继承的

    使用接口的时候,还可以用匿名内部类的方法

    5、Java异常

       异常的作用和意义:对于异常的正确处理,可以将异常提交给编程人员,使本来中断的程序可以继续运行或者退出,并且保存用户的当前操作

     运行时异常,应该是代码逻辑有问题

    检查异常:这部分需要我们手动添加捕获和处理语句

    处理异常我们用try-catch或者try-catch-finally

    如果try里面的语句或出现多个异常,该怎么处理?

    可以使用多个catch,捕获不同的异常,进行不同的处理

    编写多个catch块要注意的问题:先小后大,先从子类异常开始

    我们还可以自定义异常,需要继承Java中相似的异常类或者是基类exception

    6、String和StringBuffer

    String是不可变对象,即对象一旦生成,就不能更改。对String对象的改变会引起新的String对象的生成。这容易浪费资源

    StrinhBuffer:每次都对对象本身进行操作,而不是生成新的对象。所以在字符串内容不断改变的情况,建议使用StringBuffer。

    public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();  // 使用构造函数StringBuffer创建一个StringBuffer对象
            System.out.println("sb.capacity():"+sb.capacity()); // 16 理论值
            System.out.println("sb.length():"+sb.length()); // 0 实际值
    }

     StringBuffer转String  使用toString()方法

    String转StringBuffer  使用new StringBuffer(string)

    String和StringBuffer相互转换,是为了使用对方的方法

    7、对象数组

     8、集合

    已经有了数组,为什么还要集合?

    因为数组的长度是固定的,而且只能存储同一类型,集合的话,长度不固定,同一个集合可以保存多种类型(ArrayList、HashSet)

    参考地址:https://www.cnblogs.com/yangliguo/p/7476788.html

                      https://www.jianshu.com/p/a9fb4d26c2cd

     set集合里的数据是不重复的,当把对象添加到set中时,兼容可以保存重复的数据,这是为什么呢?

     public static void main(String[] args) {
            // 创建HashSet集合对象
            HashSet<Student> hs = new HashSet<Student>();
            //创建student对象
            Student s = new Student(20, "zb");
            Student s1 = new Student(21, "zb1");
            Student s2 = new Student(21, "zb1");
    
            //添加袁术对象
            hs.add(s);
            hs.add(s1);
            hs.add(s2);
    
            // 遍历集合
            for (Student student : hs) {
                System.out.println(student);
            }
        }

    结果分析,原因出在add这块,源码里面显示:添加的时候,先通过hashCode值进行判断,如果值已经有了,就不保存

    要解决这个问题,就需要重写类的hashCode和equals方法

    9、IO流分类

      流向: 

              输入流:  读取数据放入内存中  FileReader

              输出流:  从内存中写出数据     FileWriter

      类型:

              字节流:(一些不能转换为字符的,就需要字节流:比如图片、视频)

                         字节输入流: InputStream

                         字节输出流:OutputStream

              字符流: (读中文、复制文本文件,用这个好)

                         字符输入流:Reader

                          字符输出流:Writer

    下面这个例子是分别使用字节流和字符流复制图片

    package 常用API_08.IO;
    
    import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
    
    import java.io.*;
    
    /**
     * 使用字节和字符流赋值图片
     * 结论:二进制文件只能由字节流传输,包括:图片、视频、音频
     * 文本文件既可以使用字节流,也可以使用字符流
     * 为什么字节流不能复制二进制文件,因为字符流在复制的时候,会对字节进行合并,有的俩个字节
     * 合并成一个字符,有的三个字节合并成一个字符,在这个过程中,会丢失字节
     */
    public class CopyImage {
        public static void main(String[] args) throws IOException {
            copyImageByByte();
        }
    
    
        // 使用字节流复制图片
        private static void copyImageByByte() throws FileNotFoundException, IOException {
            // 创建字节输入流对象
            FileInputStream fis = new FileInputStream("E:\图片\若菜奈央__02.png");
            // 创建字节输出流对象
            FileOutputStream fos = new FileOutputStream("E:\若菜奈央__02.png");
    
            int len;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
    
            fos.close();
            fis.close();
        }
    
        // 使用字符流复制图片
        private static void copyImageByChar() throws FileNotFoundException, IOException {
            // 创建字符输入流对象
            FileReader fr = new FileReader("E:\图片\若菜奈央__02.png");
    
            // 创建字符输出流对象
            FileWriter fw = new FileWriter("E:\若菜奈央__02.png");
    
            // 一次读写一个字符数组
            int len;
            char[] chars = new char[1024];
            while ((len = fr.read(chars)) != -1) {
                fw.write(chars, 0, len);
                fw.flush();
            }
    
            // 释放资源
            fw.close();
            fr.close();
        }
    }

     主方法是单线程的,但是主方法里面可以创建多个线程

    多线程操作的时候,会出现数据错乱

     

     使用synchronized给代码块进行加锁,让代码变成同步(优点:安全性高;缺点:效率低)

     10、基本类型和包装类型

    参考:https://www.cnblogs.com/zsswpb/p/6329417.html

    在开发中,对于可能为空的参数,最好定义为包装类型,因为前端传的参数如果为空,基本数据类型会报错

    比如int和Integer,如果定义了一个参数是int类型,如何不传这个参数,就会报错,如果是Integer类型,就不会报错

    备注:如果配置了@RequestParam,就算是Integer,也必须传参数,因为@RequestParam有一个属性required,默认为true

    11、

  • 相关阅读:
    codeblocks-17.12mingw-nosetup(mingw编译,绿色免安装版)的下载、安装及设置一
    我的Qt历程1:第一个Qt程序
    单一职责-依赖倒转-代理模式-迭代器模式等
    结合你以往的工作经验谈谈高并发应用的性能优化措施
    如何优化数据库,如何提高数据库的性能?
    在一个千万级的数据库查询中,如何提高查询效率?
    如何提高页面的显示速度?假如一个页面的加载时间是10.89s,你会用什么方式进行优化?
    强制提高网站性能有什么办法
    简述httpModule与HttpHandler
    EntityFramework的效率与ADO.Net的效率哪个高?
  • 原文地址:https://www.cnblogs.com/zhaobao1830/p/10703687.html
Copyright © 2011-2022 走看看