zoukankan      html  css  js  c++  java
  • Java反刍小结

    面向对象生命周期

    对象生命周期:

    【1】先初始化静态变量与静态代码块。同时存在,自上而下初始化;

          -ex:静态变量中存在new 当前对象,先执行构造函数,然后继续初始化,同理。     

    【2】


    深拷贝核心步骤:

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream ops = new ObjectOutputStream(bos);
    ops.writeObject(this);
    //反序列化
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    ObjectInputStream ois = new ObjectInputStream(bis);
    return ois.readObject();


    反射:

    //获取反射三种方式:

    A a = new A();
    Class<? extends A> a1 = a.getClass();

    Class<? extends A> a2 = A.class;

    Class a3 = Class.forName("反射.A");

    =======================================true

    Class<?> aClass = B.class.asSubclass(A.class);

    Class<? extends A> testClass = B.class;

    ========================================

    //多态
    I i = I.class.cast(new A());
    i.show();
    I i1 = I.class.cast(new B());
    i1.show();

    ===================================


    interface I{
         public void show();
    }

    class A implements I{
         @Override
         public void show() {
             System.out.println("A.show()");
         }
    }

    class B extends A{
         public void show() {
             System.out.println("B.show()");
         }
    }

    //获取所有属性

    field.setAccessible(true);

    -getDeclaredFields()

    -field.get(person)


    动态代理:

    //绑定bind(obj)

    public Object bind(Object object) {
            this.obj = object;
             return Proxy.newProxyInstance(DynamicProxy.class.getClassLoader(), this.obj.getClass().getInterfaces(), this);
         }

    // 代理

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             // TODO Auto-generated method stub
             Object result  = method.invoke(obj, args);
             return result;
         }

    // 示例

            Cal proxy = (Cal) dProxy.bind(cal);
             System.out.println(proxy.add(1, 3))


    网络编程TCP:

    //客户端

    Socket socket = new Socket("127.0.0.1", 8080);

    -socket.getOutputStream()

    -DataOutputStream  writeUTF()

    -socket.getInputStream()

    -DataInputStream  readUTF()

    //服务端

    serverSocket = new ServerSocket(8080);

    Socket socket = serverSocket.accept();

    ======================UDP协议

    byte[] buf = new byte[1024];

    // 发送端口:6600 从6080端口发送

    InetAddress inetAddress = InetAddress.getByName("localhost");
    datagramPacket = new DatagramPacket(buf1,buf1.length,inetAddress,6600);
    datagramSocket = new DatagramSocket(6080);
    datagramSocket.send(datagramPacket);

    // 接受信息

            byte[] buf = new byte[1024];

    DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
    DatagramSocket datagramSocket;

    datagramSocket = new DatagramSocket(6600);
    datagramSocket.receive(datagramPacket);
    String receive = new String(datagramPacket.getData());

    datagramPacket = new DatagramPacket(buf1,buf1.length,datagramPacket.getSocketAddress());
    datagramSocket.send(datagramPacket);



    XML操作:

                Document document = reader.read("./src/test.xml");
                 Element rootElement = document.getRootElement();
                 Element newElement = rootElement.addElement("brand");
                 newElement.addElement("name", "huawei");
                 newElement.addAttribute("type", "mate");
                

    //增加元素节点

    SAXReader reader = new SAXReader();

    Document document = reader.read("./src/test.xml");
    Element rootElement = document.getRootElement();
    Element newElement = rootElement.addElement("brand");
    newElement.addElement("name", "huawei");
    newElement.addAttribute("type", "mate");


    //同步XML文件

    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
         XMLWriter writer = new XMLWriter(new FileWriter("./src/test.xml"), format);
         writer.write(document);
         writer.close();


    //设置属性值

    DocumentHelper.createAttribute(book, "id", "bk001");

    book1.addAttribute("id", "bk002");
    book1.addCDATA("test word2");


    常规注解(内置)
         @Depricated     //标注已过时的注解
         @Override     -限定方法重写    //检查是否是重写方法、检查方法是否是父类的重写方法
         @SuppressWarning     //忽略警告
             @SuppressWarnings(unused)
    元注解
         1.ElementType:提供注解的类型
         2.RetentionPolicy:用于声明注解的生命周期
             注解想要通过反射获取到,必须是RetentionPolicy.RUNTIME类型
            
         3.@Documented
             //其实可要可不要,是用于表面是否会出现在DOC注释里的
         4.@Target
             @Target(ElementType.TYPE)//可以没有,如果使用他,配合ElementType枚举类型,可以定义
                 注解作用的地方 {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE,
                     PARAMETER, TYPE}
         5.@Retention(RetentionPolicy.RUNTIME)//可以没有,如果有,可以用他来定义注解的作用周期
        
         6.@Inherited    表明注解是能被继承


    异常抛出顺序:

    try…catch捕获后,依次:try –> catch【此处不会返回去继续执行try异常之后的代码块】 --->finally –>继续执行后续代码块


    多线程部分:

    Java Thread中, join() 方法主要是让调用该方法的thread完成run方法里面的东西后, 再执行join()方法后面的代码。

    线程Thread除了提供join()方法之外,还提供了join(long millis)和join(long millies,int nanos)两个具备超时特性的方法。这两个超时方法标识,如果线程thread在给定的超时时间里没有终止,那么将会从该超时方法中返回。

    yield让步后,不一定不继续获取资源

    // 加锁机制

    private Lock lock = new ReentrantLock();

    lock.lock();

    lock.unlock();


    //读写锁:控制多读,一个写

    private ReadWriteLock lock = new ReentrantReadWriteLock();
    private Lock readLock = lock.readLock();
    private Lock writeLock = lock.writeLock();

    readLock.lock();

    readLock.unlock();

    writeLock.lock();

    writeLock.unlock();


    集合中:

    ArrayList: remove(int)  remove(obj)  removeAll()

    LinkedList: +removeFirst() removeLast()  addFirst()   addLast()  getFirst()   getLast()



    // 线程池 重写call()方法,调用get()方法

            ExecutorService pool = Executors.newFixedThreadPool(2);
             //重写call()方法,调用f.get()方法
             Future<String> f = pool.submit(new Callable<String>() {
                 @Override
                 public String call() throws Exception {
                     Thread.sleep(1000);
                     return "myCall";
                 }
             });
             try {
                 System.out.println(f.get());
                 pool.shutdown();
                 System.out.println("end");

           }



    A.class.getResource("/").getPath()  //获取当前类所在得src目录





    数据库操作类型:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL

    数据定义语言DDL:CREATE TABLE/VIEW/INDEX/SYN/CLUSTER

    数据操纵语言DML主要有三种形式:

    –1) 插入:INSERT
    –2) 更新:UPDATE
    –3) 删除:DELETE数据查

    询语言DQL(data query language)基本结构
    –1)选择:SELECT子句
    4. 数据控制语言DCL
    数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
    数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
    1) GRANT:授权。
    2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
    —-回滚—ROLLBACK
    —-回滚命令使数据库状态回到上次最后提交的状态。其格式为:
    ——SQL>ROLLBACK;
    3) COMMIT [WORK]:提交。


    事务提交的三种方式:

    (1) 显式提交
    用COMMIT命令直接完成的提交为显式提交。其格式为:
    SQL>COMMIT;

    (2) 隐式提交
    用SQL命令间接完成的提交为隐式提交。这些命令是:
    ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
    EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

    (3) 自动提交
    若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
    系统将自动进行提交,这就是自动提交。其格式为:
    SQL>SET AUTOCOMMIT ON;

    路径问题:

  • .getClass().getResource(fileName) :表示只会在当前调用类所在的同一路径下查找该fileName文件;
  • .getClass().getClassLoader().getResource(fileName):表示只会在根目录下(/)查找该文件;
  • fileName如果是前面加“/”,如"/fileName",则表示绝对路径,取/目录下的该文件;
    如果是前面没有加“/”,如"fileName",则表示相对路径,取与调用类同一路径下的该文件。
  • 如果路径中包含包名 ,getClass().getResource("com/xxx/1.xml");
    包名的层级使用"/"隔开(正斜杠),而非“.”(半角句号)。

  • XMLAPI整理汇总:

    table.attributeValue("name");

    tableNew.addAttribute("name", tname);

    Document document = reader.read(file);

    Element root = document.getRootElement();

    List<Element> tables = root.elements("table");

    Element tableNew = DocumentHelper.createElement("table");

  • 相关阅读:
    java多线程--定时器Timer的使用
    java多线程--线程池的使用
    java多线程--多线程基础小结
    java基础--java.util.Date类型小结
    onClickRow 事件
    C#里的SubString和Convert.ToDateTime
    jquery+easyui开发、培训文档
    Jquery函数大全
    前端最全的 API 集锦
    17个CSS知识点整理
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/13093136.html
Copyright © 2011-2022 走看看