首页 > 代码库 > JavaSe

JavaSe

 

  • Java_se易忘点总结


    1、java jdk1.7版本以上都支持变量接收二进制
    以0b或者0B开头代表二进制
    八进制:0开头
    十六进制:0x开头
    2、基本数据类型分类:
    整数型:byte(1字节),short(2),int(4),long(8)
    浮点型:float(4字节),double(8)
    字符型:char(2)
    布尔型:beelean(1)
    3、Float和long定义变量时必须加f/l
    Example:Float f = 23f    Long l = 123l;
         浮点型默认为double
  • Byte,Short,Int,Long封装类型都有缓冲区【-128-127】
  • 4、Java变量的命名规则:以字母, _ ,$开头,其它随意(java、关键字和特殊符号除外,中间不能有空格)。
    5、‘0’==48  ‘A’==65  ‘a’==97 理解为数字一样的东西
          任何数据类型都是先转换为10进制,然后转为二进制交付JVM处理。
    6、 Char类型和int类型相互转换
    7、 (char)100        (int)‘a’
    8、  数据类型的转换规则:从大到小:强制转换
           int num = 100;  short num2 = (int)num;
           从小到大:自动转换
    9、  int indexnum = String.valueOf(ch).getBytes("utf-8").length;  一个中文utf-8编码下 长度为3
    10、.equals() ==
    .uquals()同一数据类型的比较
     == 基础数据类型比较,值相等都为true
    Javascript中==比较值,===比较值+地址
    11、拆箱/装箱:(相同数据类型)
    封装数据类型和基本数据类型之间的转换
    开发中应用于数据类型和字符串之间的关系
    ValueOf()转换为封装数据类型
    parseInt()转换为基本数据类型
    form表单传递给后台的数据都是字符串类型的
    java的数字进制都是10进制
    12、整数相除一定要用float接收,才可以得到你想要的结果。
    比如:1/3 得到的结果是0
    开发中一般用于计算百分比
    正确的计算方法  float  f  = 1/3(float);
    这里注意:1、必须用float接收
              2、除数和被除数必须有一方要转为float类型
    12、整数相除中分母不能为0,如果在除数和被除数中有一方为浮点型结果必为浮点型,浮点型/0结果为infinity
    -浮点型/0=-infinity(负无穷数)
    5%0.0结果为:NaN  5%0报错分母不能为0
    %:在开发中用于倒计时等
    理解:如果一个秒数%60、永远介于0-60之间
    13、Css|js文件的外部引入格式
    <link type=”text/css” rel=”stylesheet”
    href=http://www.mamicode.com/”main.css”>

    <script type=”text/javascript” src=http://www.mamicode.com/”main.js” >
    </script>
    14、str.startwith(x); 排断是否以x开头
         Str.endwith(x);排断是否以x结尾
      应用数据类型的默认值:null
  • 技术分享
  •   Equals()方法 :数据类型相同,值相同的情况下才为true
    15、相同的分装数据类型
         在-128-127内都为true   超过范围为false
    因为-128-127的取值范围在缓存里面被存储了
    16、断点调试:
         F8:跳跃断点(从目前断点调到下一个断点)
         F6:逐行执行
         F5L进入方法
    17、数组提供了一个工具类:Arrays
         可以用来进行数组和集合之间的转换
        String arr[] = {"3232","fdfasd","发"};
        List<String> list = Arrays.asList(arr);
         Object   aa[]  = list.toArray();
         for (Object object : aa) {
             System.out.print(object+"\t");
            }
    18、算法;java中:冒泡算法,快速算法,递归算法,归并算法
          JS中:寻路算法,背包算法,螺纹算法
    19、集合:
         Set集合:无序,不允许重复,因为他的底层是hashcode实现的(维护),允许存储空值。
         Treeset:利用二叉树(红黑树)算法来维护元素的顺序,其内置了一个排序器,默认排序
         Hashset:在未来开发中,若有过滤和去重等的要求,可以考虑使用hashset
       集合+数组相互转换:
       String arr[] = {"3232","fdfasd","发"};
        List<String> list = Arrays.asList(arr);
        Object   aa[]  = list.toArray();
    20、对象:
          两个对象相同:一hashcode相同,二、equals相等
          每个对象对应都有一个hashcode值,
    21、lam表达式:针对集合才有的(jdk1.8新增内容)

    遍历集合:list.forEach(num->System.out.println(num));
    遍历对象:list.forEach(stu->System.out.println(stu.getname());
    list.removeIf(num->条件);符合条件的会被删掉
    Js中 splice(sindex,nums,替换的值):nums是替换的个数
    Js:   Splice(sindex,nums)sindex:从那里开始nums剪切的个数
    22、Math方法
         取整:Math.round(); 向上取整;
               Math.floor();向下取整
         以上两种方式都不能保留小数位
      double d = 21.52654d;
    String cc = new DecimalFormat("#.####").format(d);
    “#.##”如果是整数的话会有小数位,
    “0.00”是整数的情况下会有小数位, 其它没有区别
    注意:此方法获取小数位时:采用的四舍五入、
    Js中保留小数位:c.toFixed(2);此处保留两位小数

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算:BigDecimal
    BigDecimal b1 = new BigDecimal(1);//构造函数传值
        BigDecimal b2= new BigDecimal(3);
        b1.add(b2);//相加方法
        b1.subtract(b2);//相减方法
        b1.multiply(b2);//相乘方法
        b1.divide(b2,20,BigDecimal.ROUND_HALF_EVEN);//相除方法 20位有效位
    23、面向对象:
          1、全局变量可以不用赋初值
             基础数据类型会有各自的默认值,分装数据类型的默认值为null
          2、静态方法只能掉静态的成员(静态属性+静态方法)
             非静态方法即可调静态成员,也可调非静态成员
          3、静态方法,静态属性等是属于类的东西,不能用this等实例化的对象去调,只能通过类去调(单例设计模式里面他们都是被挂载在类上面的)
             父类被final修饰的方法不能被覆盖,但是可以被调用
          4、重载:方法名相同,参数列表不同,于其它任何无关。
             构造函数一般用来给成员变量赋值,可以重载
          5、jdk1.5之后增加了动态参数
          动态参数:动态参数一般用于同一数据类型,如果数据类型不同 就用Object类型,有多个参数是,动态参数放在最后。
    public static void get(Object... params) {
            for (Object object : params) {
                System.out.println(object);}}
            public static void main(String[] args) {
            Donparams.get("柳翰林", 26, 3, 555, 98);
        }
    6、程序的执行顺序,静态代码块>代码块>构造函数>普通代码
    7、访问修饰符:public proceted default private
       Proceted:在存在继承关系时才可访问(同包、不同包均可)。
       Default:只有在同包中可以访问。
    8、重写(覆盖),super只有在存在继承关系的基础上存在的
       子类覆盖父类的方法访问修饰符必须大于等于父类被覆盖的方法
       子类覆盖父类的方法可以被重载
    9、抽象类:用abstract修饰的类
       抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类
       抽象方法:作用就是强迫子类一定要去覆盖的部分
       抽象方法只有定义,没有自我实现。
       抽象类不能被实例化对象,但是可以定义构造方法
       抽象类是多态的最佳体现,接口是多态的完美体现
       抽象方法必须定义在抽象类和接口中
       Final修饰的方法不能被覆盖
    10、接口
    接口里面的方法都是抽象方法,但是抽象关键字被处理,默认不       写
    接口里面允许有静态方法+默认方法(default)修饰的方法       ( jdk1.8新增)
    接口里面的访问修饰符只能用public和default
    接口里面没有构造函数,抽象类里面有
    11、内部类:
         .成员内部类
         .静态内部类
         .方法内部类
         .匿名内部类

    Java_se易忘点总结

    1、java jdk1.7版本以上都支持变量接收二进制
    以0b或者0B开头代表二进制
    八进制:0开头
    十六进制:0x开头
    2、基本数据类型分类:
    整数型:byte(1字节),short(2),int(4),long(8)
    浮点型:float(4字节),double(8)
    字符型:char(2)
    布尔型:beelean(1)
    3、Float和long定义变量时必须加f/l
    Example:Float f = 23f    Long l = 123l;
         浮点型默认为double
    4、Java变量的命名规则:以字母, _ ,$开头,其它随意(java、关键字和特殊符号除外,中间不能有空格)。
    5、‘0’==48  ‘A’==65  ‘a’==97 理解为数字一样的东西
          任何数据类型都是先转换为10进制,然后转为二进制交付JVM处理。
    6、 Char类型和int类型相互转换
    7、 (char)100        (int)‘a’
    8、  数据类型的转换规则:从大到小:强制转换
           int num = 100;  short num2 = (int)num;
           从小到大:自动转换
    9、  int indexnum = String.valueOf(ch).getBytes("utf-8").length;  一个中文utf-8编码下 长度为3
    10、.equals() ==
    .equals()同一数据类型的比较
     == 基础数据类型比较,值相等都为true
    Javascript中==比较值,===比较值+地址
    11、拆箱/装箱
    封装数据类型和基本数据类型之间的转换
    开发中应用于数据类型和字符串之间的关系
    ValueOf()转换为封装数据类型
    parseInt()转换为基本数据类型
    form表单传递给后台的数据都是字符串类型的
    java的数字进制都是10进制
    12、整数相除一定要用float接收,才可以得到你想要的结果。
    比如:1/3 得到的结果是0
    开发中一般用于计算百分比
    正确的计算方法  float  f  = 1/3(float);
    这里注意:1、必须用float接收
              2、除数和被除数必须有一方要转为float类型
    12、整数相除中分母不能为0,如果在除数和被除数中有一方为浮点型结果必为浮点型,浮点型/0结果为infinity
    -浮点型/0=-infinity(负无穷数)
    5%0.0结果为:NaN  5%0报错分母不能为0
    %:在开发中用于倒计时等
    理解:如果一个秒数%60、永远介于0-60之间
    13、Css|js文件的外部引入格式
    <link type=”text/css” rel=”stylesheet”
    href=http://www.mamicode.com/”main.css”>

    <script type=”text/javascript” src=http://www.mamicode.com/”main.js”%20>
    </script>
    14、str.startwith(x);%20排断是否以x开头
     %20 %20 Str.endwith(x);排断是否以x结尾
     %20应用数据类型的默认值:null
     %20Equals()方法%20:数据类型相同,值相同的情况下才为true
    15、相同的分装数据类型
     %20 %20 在-128-127内都为true %20 超过范围为false
    因为-128-127的取值范围在缓存里面被存储了
    16、断点调试:
     %20 %20 F8:跳跃断点(从目前断点调到下一个断点)
     %20 %20 F6:逐行执行
     %20 %20 F5L进入方法
    17、数组提供了一个工具类:Arrays
     %20 %20 可以用来进行数组和集合之间的转换
     %20 %20String%20arr[]%20=%20{"3232","fdfasd","发"};
        List<String> list = Arrays.asList(arr);
         Object   aa[]  = list.toArray();
         for (Object object : aa) {
             System.out.print(object+"\t");
            }
    18、算法;java中:冒泡算法,快速算法,递归算法,归并算法
          JS中:寻路算法,背包算法,螺纹算法
    19、集合:
         Set集合:无序,不允许重复,因为他的底层是hashcode实现的(维护),允许存储空值。
         Treeset:利用二叉树(红黑树)算法来维护元素的顺序,其内置了一个排序器,默认排序
         Hashset:在未来开发中,若有过滤和去重等的要求,可以考虑使用hashset
       集合+数组相互转换:
       String arr[] = {"3232","fdfasd","发"};
        List<String> list = Arrays.asList(arr);
        Object   aa[]  = list.toArray();
    20、对象:
          两个对象相同:一hashcode相同,二、equals相等
          每个对象对应都有一个hashcode值,
    21、lam表达式:针对集合才有的(jdk1.8新增内容)

    遍历集合:list.forEach(num->System.out.println(num));
    遍历对象:list.forEach(stu->System.out.println(stu.getname());
    list.removeIf(num->条件);符合条件的会被删掉
    Js中 splice(sindex,nums,替换的值):nums是替换的个数
    Js:   Splice(sindex,nums)sindex:从那里开始nums剪切的个数
    22、Math方法
         取整:Math.round(); 向上取整;
               Math.floor();向下取整
         以上两种方式都不能保留小数位
      double d = 21.52654d;
    String cc = new DecimalFormat("#.####").format(d);
    “#.##”如果是整数的话会有小数位,
    “0.00”是整数的情况下会有小数位, 其它没有区别
    注意:此方法获取小数位时:采用的四舍五入、
    Js中保留小数位:c.toFixed(2);此处保留两位小数

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算:BigDecimal
    BigDecimal b1 = new BigDecimal(1);//构造函数传值
        BigDecimal b2= new BigDecimal(3);
        b1.add(b2);//相加方法
        b1.subtract(b2);//相减方法
        b1.multiply(b2);//相乘方法
        b1.divide(b2,20,BigDecimal.ROUND_HALF_EVEN);//相除方法 20位有效位
    23、面向对象:
          1、全局变量可以不用赋初值
             基础数据类型会有各自的默认值,分装数据类型的默认值为null
          2、静态方法只能掉静态的成员(静态属性+静态方法)
             非静态方法即可调静态成员,也可调非静态成员
          3、静态方法,静态属性等是属于类的东西,不能用this等实例化的对象去调,只能通过类去调(单例设计模式里面他们都是被挂载在类上面的)
             父类被final修饰的方法不能被覆盖,但是可以被调用
          4、重载:方法名相同,参数列表不同,于其它任何无关。
             构造函数一般用来给成员变量赋值,可以重载
          5、jdk1.5之后增加了动态参数
          动态参数:动态参数一般用于同一数据类型,如果数据类型不同 就用Object类型,有多个参数是,动态参数放在最后。
  • 如果编译时的类型和运行时的类型不一致的时候,就出现了所谓的多态。
    public static void get(Object... params) {
            for (Object object : params) {
                System.out.println(object);}}
            public static void main(String[] args) {
            Donparams.get("柳翰林", 26, 3, 555, 98);
        }
    6、程序的执行顺序,静态代码块>代码块>构造函数>普通代码
    7、访问修饰符:public proceted default private
       Proceted:在存在继承关系时才可访问(同包、不同包均可)。
       Default:只有在同包中可以访问。
    8、重写(覆盖),super只有在存在继承关系的基础上存在的
       子类覆盖父类的方法访问修饰符必须大于等于父类被覆盖的方法
       子类覆盖父类的方法可以被重载
  •    父类被final修饰的方法不能被覆盖,但是可以被调用
  • 9、抽象类:用abstract修饰的类
       抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类
       抽象方法:作用就是强迫子类一定要去覆盖的部分
       抽象方法只有定义,没有自我实现。
       抽象类不能被实例化对象,但是可以定义构造方法
       抽象类是多态的最佳体现,接口是多态的完美体现
       抽象方法必须定义在抽象类和接口中
       Final修饰的方法不能被覆盖
    10、接口
    接口里面的方法都是抽象方法,但是抽象关键字被处理,默认不写
    接口里面允许有静态方法+默认方法(default)修饰的方法       ( jdk1.8新增)
    接口里面的访问修饰符只能用public和default
    接口里面没有构造函数,抽象类里面有
  • 接口可以继承接口,是系统可插拔的保证。
  • 11、内部类:
         .成员内部类
         .静态内部类
         .方法内部类
         .匿名内部类
   12、反射:
            创建对象的一种方式,动态修改jvm中的成员
             Class cla = Class.forName ("lhl.in.out.MyBuffer" );
              动态解析Class文件中的构造函数,成员变量,成员方法
    13、泛型:
            不能再静态成员上使用泛型类型
            泛型中的数据类型一定是封装数据类型。
            所谓泛型-就是允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量,创建对                                        象,调用方法时动态的指明.
 
    14、枚举类:
         public Enum weekEnum{
           monday,
           friday,
           sunday;
 
                             }
 
        枚举类:1>是一种特殊的类,它可以定义成员变量,成员方法,可以实现一个或者多个接口
                由于其不能实例化,所以只能定义自己(私有)的构造器
                枚举类的属性间一逗号隔开
                2>不能继承具体类和抽象类,必须通过Valueof实现具体的对象
                3>自定义的枚举类,其父类是Eunm,而不是Object
              
               Enum e Enum.valueOf(cla, "xxx");
             
        15、IO:
                输入流              输出流
字节流:   FileoutputStream    FileinputStraem
字符流:   InputStreamReader   OutputStreamWrite[可以设置编码格式]
缓冲流:   BufferReader        BufferWriter
     File file = new File("e://download");
     File file = new File(file,"a.jpg")
IO中最为丰富的一个流:RandomAccssFile ran = new RandomAccessFile (new File(""), "" );
          NIO:new io
         新的Io和传统的 Io有相同的目的,都是用来进入输入和输出的,但是新的IO使用了不同的方式来处理输入和输出。新IO采用内存映射文件的方式来处理输入和输出,
         新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件,通过这个访问文件比传统的Io要快得多。
2:java.nio相关的包:
          a:java.nio包:主要包含各种与Buffer相关的类。
          b:java.nio.channels包:主要包含各种与Channel和Selector相关的类。
          c:java.nio.charset:主要包含与字符集相关的类
          d:java.nio.channels.spi:主要包含与Channel相关的服务提供者编程接口。
          e:java.nio.charset.spi:主要包含与字符集相关的服务提供者编程接口。
          
3:  Channel通道和Buffer缓冲是 Nio中的两个核心对象,Channel是对传统IO的模拟。所有的NIO系统中所有的数据都需要通过通道传输,Channel与传统的InputStream和OutputStream
    最大的区别在于他提供了一个map()方法,通过map方法可以直接将一块数据映射到内存中,如果说传统的 Ios是面向流的处理,而NIO是面向快的处理。
    Buffer可以被理解成一个容器,它的本质是一个数组,发送数据到Channel中的所有对象都必须首先放到Buffer中,而从Channel中读取的数据也必须向放到Buffer中。
       16、异常:编译时异常+运行时异常
编译时异常:io,sql,反射
 
运行时异常:
       17:jsoup:文件解析/xml文件解释【重点】
      
       18、json 、Bean、Map相互转换
           1、首先定义一个类,定义私有属性,生成get、set方法。
           2、创建属性类的对象,将值set进去
           3、Map<String, String> map = BeanUtils.describe (person );//Bean转换为map
           4、
public  static <T>T map2Bean(Map<String, String> map,Class<T>class1 ){
     T bean = null;
       try {
           bean = class1.newInstance();
          BeanUtils. populate(bean, map);
     } catch (InstantiationException|InvocationTargetException|IllegalAccessException e) {
           e.printStackTrace();
     }   return bean ;
}
                           5、Person pp map2Bean( map, Person.class);//Map转为Bean
                System.out.println( pp.getName());
               [备注:有Date类型的时候需要先注册下]
               必须导入:commons-beanutils-1.9.2.jar;commons-logging-1.2.jar包
 struts2-json-plugin-2.3.15.1.jar(喜欢用)    是对   json-lib-2.3-jdk15.jar【谷歌】的封装
 
 Bean转json:   String  jsonstring =  JSONUtil.serialize (person );[需要javaee包或者web环境下]
 map转json: String   jsonstring =  JSONUtil.serialize (map )此处的map可以是任何对象/Object
 JSONUtil有个反序列化:
 JSON转map 
Map<String,String> mm (Map<String, String>)JSONUtil.deserialize(jsonstring );
 json参与转换的时候必须导入:  技术分享
         
       19、StringBuffer、StringBuffer为了弥补String的缺陷而出现的,不会产生垃圾数据
           StringBuffer:线程安全的,消耗内存比较大
           StringBuilder:非线程安全的,消耗内存小【开发中常用】
                   
       20、日期类Date:
         技术分享
                         日历类:抽象类【开发中常用】
       技术分享
技术分享
 
    关于日期封装的两个工具jar包:
joda-time-1.6.2.jar          date4j.jar
技术分享
  • 21、网络编程:
 
  22、在封装数据库里面一般用Bean get set  但是有特殊情况下:用Map讲数据库查询的值存储起来
然后再用集合返回。
  23、jstl遍历list/map  list里面包含map的情况
     文件头需要引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
     ${map.key} ===  ${map.value}            
     ${map["key"]}  ======${map["value"]}
 
 <c:forEach items = "${lists}" var = "list">
  <c:forEach items = "${list}" var = "map">
        <!-- ${map["key"]}  ======${map["value"]} 注释 -->
         ${map["key"]}  ======${map["value"]}
    </c:forEach >
    </c:forEach >
 
24、技术分享

JavaSe