• JAVA学习体会


    1.一个文件最好只放一个类,一个文件里面只能有一个类是public,类名与文件名一定保持一致;
    2.同样不支持多继承;
    3.继承使用的是extends关键字
    4.布尔类型是boolean,long类型末尾加L,字符串是大写的String;
    5.Java的位运算符比C#多一个,>>>无符号右移
    6.Java的装箱很特殊,例如-128~127是同一个实例(缓存到某一数组),但之外会则会重新创建
    7.break可以终止所在的循环,还可以直接结束外层循环,作法是在外层加个标签:,break 标签;
      continue也类似,也可以加个标签,用于结束标签所标识的循环的当次循环;
    8.遍历集合,使用for (int i : a) ,C#是foreach(int i in a)
    9.数组基类是Arrays提供一系列的方法;
    10.可变参数,例如(String...books)
    11.方法修饰符还多了个default,类中和同一个包中
    12.类无属性提供(get、set访问),只能自己写相应的方法访问,命名方式为getAbc和setAbc(A为相应字段首字母大写)
    13.包相当于C#的命名空间,引入采用import 包名.*,而namespace 在Java中改成package,包名应该全由小写字母写成,
        静态导入 import static 包名.*---导入包中类下的所有静态属性(使用static标识的字段)
    14.继承类使用extends关键字,引用父类使用的是super关键字(C#用base)
    15.Java中用instanceof来判断一个对象是否是某个类型(要么是同类,要么是父类),例如 myobject instance of BaseClass
       要么是true,要么是false
    16.父类中的方法使用final关键字限制其不被子类重写,同样某类不希望被继承也可用final修饰,C#中使用关键字sealed,对于变量赋值,
    final修饰的变量值不能修改,局部变量使用它来修饰,可以赋值1次,实例化时用final来修饰,该对象地址不能改;
        类中的私有字段如果final修饰,则只能在构造器中给值
    17.Java在类中可以使用{}作为初始化块,在创建对象时隐式执行,而且在执行构造器之前执行;
    18.Java的char类,使用包装类Character,int包装类Integer,包装类都提供parseXXX的静态方法,将字符串进行转换,String类提供
    valueOf静态方法将其它类型转换成字符串
    19.Java实现接口使用implements关键字,而接口继承使用extends,C#只使用:
    20.@Override,想重写基类方法,编译时系统会帮助检查方法是否写正确了(例如toString和tostring的区别)。
    21.Java中有个内部类的用法,这个倒是C#没有提倡的,内部类可以访问外部类的私有字段,编译完成会生成两个.class文件,如果要访问外部
    类的属性,有时需要加全限定,类名.this.变量名,反过来,外部类想访问内部类的私有字段,必须new 类名().变量名;
       Java还允许在接口中定义内部类,默认使用的是public static修饰(即静态内部类)
    22.局部内部类--放在方法内定义,类的全部使用仅限于方法内;
       匿名内部类--在方法内直接new实例化,不能定义构造器
    23.闭包概念:类要实现继承和实现接口,出现同名方法,使用内部类来实现;
    24.Java的枚举与C#有很大不同,内部可以有public属性,生成实例用Enum.valueof方法,还可以实现接口,内部用switch(this)可以实现不同
    的分支,感觉设计和C#比太乱了
       另外枚举值可以{}单独对应方法
       Add
       {
         
       }
    25.finalize类似于Dispose方法
    26.Java的强制垃圾回收Runtime.getRuntime().gc(),但只是建议,并不立即回收; java -verbose:gc可查看每次垃圾回收后的信息
    27.Java的集合分3大类:Set(无顺序)、List(有顺序)、Map(键值对)
       迭代接口:Iterator接口
       Iterator myIt=集合对象.iterator();
       while(myIt.hasNext()) myIt.next()
    28.HashSet按Hash算法,按hashCode索引查找,无顺序放,线程不同步,可加null;
       有个TreeSet按红黑树排序算法存储元素对象(必须实现Comparable接口)
       Queue队列
       HashTable表
    29.输入输出,感觉Java这里设计还比较简单
       输入流 InputStream/Reader (字节流与字符流)
       输出流 OutputStream/Writer
       随机文件访问类:RandomAccessFile,提供文件任意位置读写。 
    多线程?
    31.网络编程
       (1)抛出异常可以在方法定义后面直接
       (2) InetAddress 代表IP地址对象,注意它的isReachable会试图建立TCP连接,会返回false(防火墙限制)
       (3)UrlEncoder类与UrlDecoder类
       (4)Url类,openConnection方法返回URLConnection对象处理Http请求
            //发送POST请求必须设置如下两行
    conn.setDoOutput(true);
    conn.setDoInput(true);
            conn.setDoOutput(true);
    conn.setDoInput(true);
    //获取URLConnection对象对应的输出流
    out = new PrintWriter(conn.getOutputStream());
    //发送请求参数
    out.print(param);
    //flush输出流的缓冲
    out.flush();
    //定义BufferedReader输入流来读取URL的响应
    in = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));
    String line;
    while ((line = in.readLine())!= null)
    {
    result += "\n" + line;
    }
        (5)Socket设置超时
              socket.connect( new InetSocketAddress( "127.0.0.1", 30000), 30000 ); 
    32.序列化与反序列化
       (1)序列化:类要实现Serializable接口,采用ObjectOutputStream对象的Write方法序列化对象(二进制),如果不想序列化某个字段
          使用关键字transient
      (2)反序列化:采用采用ObjectInputStream对象的Read方法读出已序列化的二进制;
      (3)自定义序列化:实现Externalizeable
            在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。
    但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
             另外由于StringBuffer是线程安全的,StringBuilder非安全
  • 相关阅读:
    关于ckeditor ajax提交到后台 问题
    关于ckeditor 第二次加载 出现问题
    jquery 面板拖拽
    【Sonarqube】——IDEA配置sonarlint
    【Sonarqube】——sonarqube配置代码检查规范
    算是一个新的开始吧
    简单的DBHelper类
    如何搭建MVC3与配置models层
    经典SQL语句大全
    c# lambda表达式学习
  • 原文地址:https://www.cnblogs.com/bearhb/p/2569804.html
Copyright © 2020-2023  润新知