• Java基础知识之系统命令调用、序列化、JDO、匿名内部类


    1. JAVA调用系统命令或可执行程序

     
     
    //      String cmd = "F:\\apache-tomcat-6.0.20.exe";  
    // String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc";
    // String cmd = "cmd.exe /c start F:\\test.doc";
    String cmd = "ping www.baidu.com";

         Runtime run = Runtime.getRuntime();//返回与当前 Java 应用程序相关的运行时对象
    try {
    Process p = run.exec(cmd);// 启动另一个进程来执行命令
    BufferedInputStream in = new BufferedInputStream(p.getInputStream());
    BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
    String lineStr;
    while ((lineStr = inBr.readLine()) != null)
    //获得命令执行后在控制台的输出信息
    System.out.println(lineStr);// 打印输出信息
    //检查命令是否执行失败。
    if (p.waitFor() != 0) {
    if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束
    System.err.println("命令执行失败!");
    }
    inBr.close();
    in.close();
    } catch (Exception e) {
    e.printStackTrace();
    }

    2.Java序列化(串行化)

      是Java建立的一种传输机制,它能够把对象的信息转换成一系列的字节码,这些字节码可以被传输到网络或者存储到一个文件中。序列化的使用非常简单,但他还是有限制的。它必须立即存取对象的特征,而且它不适合存取大批量的数据。在更改一个对象的属性时如果有错误发生它无法实现“回滚”,因此不适于应用程序对数据完整性的要求,而且不能实现多个线程或程序异步读写数据。所有这些不足都使得序列化无法满足大多数数据存储要求。

      1)串行化能保存的元素 
      串行化只能保存对象的非静态成员交量,不能保存任何的成员方法和静态的成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符都不能保存。 a.永久性保存对象,保存对象的字节序列到本地文件中;b.通过序列化对象在网络中传递对象;c.通过序列化在进程间传递对象。 

      2)串行化:需要将对象的状态保存下来,在需要时再将对象恢复。接口Serialization用来作为实现对象串行化的工具 ,只有实现了Serialization的类的对象才可以被串行化。 
      3)transient关键字 
      对于某些类型的对象,其状态是瞬时的,这样的对象是无法保存其状态的。例如一个Thread对象或一个FileInputStream对象 ,对于这些字段,我们必须用transient关键字标明,否则编译器将报措。 
      另外 ,串行化可能涉及将对象存放到 磁盘上或在网络上发达数据,这时候就会产生安全问题。因为数据位于Java运行环境之外,不在Java安全机制的控制之中。对于这些需要保密的字段,不应保存在永久介质中 ,或者不应简单地不加处理地保存下来 ,为了保证安全性。应该在这些字段前加上transient关键字。

      4)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

      5) a. 在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。b. Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。c. Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。

    3.JDO

      JDO 是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API.JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用).这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上.另外,JDO很灵活,因为它可以在任何数据底层上运行.JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强.

      JDO:JDO集成了很多上述持久性机制的特性,这使得在JDO中创建一个持久化(persistence)类就像创建一个序列化类一样简单。JDO支持批量数据的存储,数据一致性,并发处理和JDBC的查询功能。就像对象-关系映射软件和对象数据库一样,它允许使用面向对象的高级特性比如“继承”。它避免了像EJB中实体Bean一样必须依赖于来自厂商定义的严格规范。同EJB一样,JDO也不规定任何特定的后端数据库。但是,这里还是要说一下,世界上没有“万灵丹”。所以,使用JDO并不是对于每一个应用程序都是有好处的。很多应用程序完全可以使用其他更理想的存储机制。

    4. 内部类、匿名内部类

    1.内部类基本理论:

         关于JAVA内部类:一个内部类的定义是定义在另一个类内部的类。存在它的原因是:
      1)一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。
      2)对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。

    2. 匿名内部类

    案例:

     
    public class MyMain {

    public static void main(String args[]) {

    new Out(){
    void show(){
    System.out.println("this is Anonymous InterClass showing.");
    }
    }.show();

    new MyInter(){
    public void print(){
    System.out.println("this is myInter showing.");
    }
    }.print();
    }
    }

    class Out{
    void show(){
    System.out.println("this is Out showing.");
    }
    }

    interface MyInter{
    void print();
    }

    匿名内部类就是没有名字的内部类。 注意: 

    1)匿名内部类不能有构造函数 
    2)匿名内部类不能定义任何静态成员、方法和类 
    3)匿名内部类不能是public、protected、private、static 
    4)只能创建匿名内部类的一个实例 
    5)一个匿名内部类用其隐含实现一个接口或实现一个类。 
    6)因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效

  • 相关阅读:
    php备份数据库类分享
    nginx https配置后无法访问,可能防火墙在捣鬼
    linux服务器,svn认证失败,配置问题,防火墙等等
    为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
    nginx 防火墙、权限问题
    思数云hadoop目录
    delete
    善用GIMP(Linux下的Photoshop),图像处理轻松又自由
    超赞干货!2016年新鲜出炉的20款网页开发工具推荐
    10款Web前端工具
  • 原文地址:https://www.cnblogs.com/makeryan/p/2498310.html
Copyright © 2020-2023  润新知