Java 基础知识汇总 - 04


1.运行时异常和一般异常的区别

异常表示程序运行过程中出现的与我们假设的状态不相符的状态。运行时异常表示虚拟机运行的操作中出现的错误。java编辑器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求捕获未被声明的运行时异常。Error表示严重性的问题,比如内存泄露,通常这种问题极难修复,而Exception则是通过改善设计通常可以避免的问题。

2.Java的异常处理机制

java 异常指的是java程序运行时(非编译时)出现的非正常的情况或错误。java使用面向对象的方式来处理异常,把程序中发生的异常按照类别封装到一个类,类里面包含了异常的相关信息。所有的异常的根类是java.lang.Throwable,下面派生了两个子类,Error和Exception。如果Error发生(内存泄漏,线程死锁等等)程序就会挂掉,而Exception也分为系统异常和普通异常。普通异常如网络掉线,硬盘不够等等,普通异常是系统设计方面的问题,可以通过改善设计解决问题,如空指针异常(NullPointerException),数组越界异常(ArrayIndexOutofBoundsException),类型转换异常(ClassCastException),读写异常(IOException),数据库异常(SQLException)

3.同步和异步有什么异同

如果数据需要在线程之间共享,比如正在写的数据今后会被另一个线程读,或者正在读的数据已经被另一个线程写过了,这些数据是共享数据,需要使用同步,否则数据发生脏读。当应用程序的某个对象调用了一个需要耗时很长的方法,但不希望程序等待方法返回时,这时候就使用异步编程,将更有效率。

4.线程的run和start方法

启动一个线程使用的是start方法,run方法里面是线程所关联的执行代码。start方法使线程处于就绪状态,以后可以被调度为运行状态。

5.下面题目的结果

public static void main(String[] args) {
	Byte b = new Byte("127");
	System.out.println(b.toString()==b.toString());
	System.out.println(b.toString().equals(b.toString()));
}

答案是:

false
true
false
true

6.java常见的包

java.lang,java.io,java.sql,javax.servlet,org.apache.structs.action

7. Java AOP

AOP是Aspect Oriented Programming的缩写,意思是面向方面编程,与OOP(Object Oriented Programming)面向对象编程对等,都是一种编程思想。 
从OOP角度分析,我们关注业务的处理逻辑,是属于纵向的行为,从AOP角度分析,我们关注对象行为发生时的问题,是属于横向的行为。 
 
AOP 作用: 
1   监控函数的调用 
2   捕获异常发生 
 
实际应用在:事务、安全、日志等横切关注。

//接口  
public interface UserBean  
{  
    void getUser();  
    void addUser();  
    void updateUser();  
    void deleteUser();  
}  
//原始实现类  
public class UserBeanImpl implements UserBean  
{  
    private String user = null;  
    public UserBeanImpl()  
    {         
    }     
    public UserBeanImpl(String user)  
    {  
        this.user = user;  
    }     
    public String getUserName()  
    {  
        return user;  
    }     
    public void getUser()  
    {  
        System.out.println("this is getUser() method!");  
    }  
  
    public void setUser(String user)  
    {  
        this.user = user;  
        System.out.println("this is setUser() method!");  
    }  
    public void addUser()  
    {  
        System.out.println("this is addUser() method!");  
    }  
      
    public void updateUser()  
    {  
        System.out.println("this is updateUser() method!");  
    }     
    public void deleteUser()  
    {  
        System.out.println("this is deleteUser() method!");    
    }         
}  
//代理类  
import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
import java.lang.reflect.Proxy;  
import com.cignacmc.finance.bean.UserBeanImpl;  
  
public class UserBeanProxy implements InvocationHandler  
{  
    private Object targetObject;  
      
    public  UserBeanProxy(Object targetObject)  
    {  
        this.targetObject = targetObject;         
    }  
      
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable  
    {  
        UserBeanImpl userBean = (UserBeanImpl) targetObject;  
        String userName = userBean.getUserName();  
        Object result = null;  
          
        //权限判断  
        if(userName != null && !"".equals(userName))  
        {  
            result = method.invoke(targetObject, args);  
        }  
          
        return result;  
    }  
}  
  
//测试类  
import java.lang.reflect.Proxy;  
  
import com.cignacmc.finance.bean.UserBean;  
import com.cignacmc.finance.bean.UserBeanImpl;  
import com.cignacmc.finance.proxy.UserBeanProxy;  
  
public class ProxyExe  
{  
    public static void main(String[] args)  
    {  
        System.out.println("Proved.............");  
        UserBeanImpl targetObject = new UserBeanImpl("Bob Liang");        
        UserBeanProxy proxy = new UserBeanProxy(targetObject);  
        //生成代理对象          
        UserBean object = (UserBean)Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),   
                targetObject.getClass().getInterfaces(), proxy);  
        object.addUser();  
          
        System.out.println("NO Proved.............");  
        targetObject = new UserBeanImpl();        
        proxy = new UserBeanProxy(targetObject);  
        //生成代理对象          
        object = (UserBean)Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),   
                targetObject.getClass().getInterfaces(), proxy);  
        object.addUser();  
                  
    }  
}  

输出:

Proved............. 
this is addUser() method! 
NO Proved............. 

8.Union 和 Union All

Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All

 两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。

9.doGet和doPost


10.servlet的生命周期


 





 

发布了381 篇原创文章 · 获赞 96 · 访问量 71万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览