Java基础

面向对象的特征
封装,继承,多态,抽象
  1. 封装

封装给对象提供了隐藏内部特性的行为和能力。对象提供一些被其他对象访问的方法来改变它内部的数据。

在Java当中有三种修饰符,public ,private , protected。每一种修饰符给其他位于同一个包或者不同包下面对象赋予了不同的权限。

封装的好处:

    • 通过隐藏对象的属性来保护对象内部的状态。
    • 提高了代码的可用性和维护性,因为对象的行为可以被单独的改变或者是扩展。
    • 禁止对象之间的不良交互提高模块化。
    1. 继承

    继承给对象提供了从基类获取字段和方法的能力,继承提高代码的重用性,也可以在不修改类的情况下给现存的类添加新特性。

    1. 多态

    多态是编程语言给不同底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面来。(列:API)

    1. 抽象抽象是把想法从具体的实例中分离出来的步骤,因此要根据他们的功能而不是实现细节来创建类,Java支持创建只暴露接口而不包含方法实现的抽象的类,这种抽象技术的主要目的是把类的行为和实现细节分离开。
    final,finally,finalize的区别
    1. final
      修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
    2. finally
      在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
    3. finalize
      方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
    Int 和 Integer 有什么区别
    Int 是基本数据类型
    Integer是其包装类,注意是一个类。
    为什么要提供包装类呢???
    一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。
    比如,现在int要转为String
    
        1.
           Int a=0;
    
        2.
           String result=Integer.toString(a);
    
    在java中包装类,比较多的用途是用在于各种数据类型的转化中。
    我写几个demo
    //通过包装类来实现转化的
    
        1.  
           int num=Integer.valueOf("12");
    
        2.  
           int num2=Integer.parseInt("12");
    
        3.  
           double num3=Double.valueOf("12.2");
    
        4.  
           double num4=Double.parseDouble("12.2");
    
        5.  
           //其他的类似。通过基本数据类型的包装来的valueOf和parseXX来实现String转为XX
    
        6.   
           String a=String.valueOf("1234");//这里括号中几乎可以是任何类型
    
        7.  
           String b=String.valueOf(true);
    
        8.  
           String c=new Integer(12).toString();//通过包装类的toString()也可以
    
        9.
           String d=new Double(2.3).toString();
     
     再举例下。比如我现在要用泛型
    
        1.
         List<Integer> nums;
    
        2. 
         这里<>需要类。如果你用int。它会报错的。
    重载和重写的区别

    override(重写)

    1. 方法名、参数、返回值相同。
    2. 子类方法不能缩小父类方法的访问权限。
    3. 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
    4. 存在于父类和子类之间。
    5. 方法被定义为final不能被重写。

    overload(重载)

    1. 参数类型、个数、顺序至少有一个不相同。
    2. 不能重载只有返回值不同的方法名。
    3. 存在于父类和子类、同类中。
    抽象类和接口的有什么区别
    1. 接口是公开的,里面不能有私有方法和私有变量,是用于让别人私用的,而抽象类是可以有私有方法和私有变量的,另外,实现接口的一定要实现接口的所以方法,而实现抽象类可以有选择的选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后抽象类实现接口,最后才到具体类实现。
    2. 接口可以实现多重继承,而一个类只能继承一个超类,但可以通过实现多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
    说说反射的用途及实现
    1. Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架

    Java反射的主要功能:

    • 确定一个对象的类
    • 取出类的modifiers,数据成员,方法,构造器,和超类.
    • 找出某个接口里定义的常量和方法说明.
    • 创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
    • 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
    • 在运行时刻调用动态对象的方法.
    • 创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值.

    反射的应用很多,很多框架都有用到

    Spring 的 IOC/DI 也是反射….
    JavaBean和jsp之间调用也是反射….
    Struts的 FormBean 和页面之间…也是通过反射调用….
    JDBC 的 ClassForName()也是反射…..
    Hibernate的 find(Class clazz) 也是反射….

    反射还有一个不得不说的问题,就是性能问题,大量使用反射系统性能大打折扣。怎么使用使你的系统达到最优就看你系统架构和综合使用问题啦,这里就不多说了。

    Last modification:April 23, 2019
    如果觉得我的文章对你有用,请随意赞赏