• Java笔记


    书本总是喜欢用冗长的代码来描述,不方便快速复习。所以摘下要点,方便复习。

    一、基本语法以及操作符

    二、访问权限

    Public

    private

        protect 子类可以访问父类受保护成员

    不过不声明以上三种,就默认为default,

    权限为在同一个包内可以访问。

    不管是何种权限,在同一个类里面是都能访问到的。

    也就是在类的实现里面都可以访问即使是已经实例化的对象。

    三、复用类

    1、  组合,在类里面使用其他的类。

    2、  继承。

    无法继承父类的private内容,也就是父类的private内容对子类不可见,但是若父类对其拥有一个public方法的调用,子类仍然可以通过调用此public方法使用父类private方法。

    初始化顺序:

    a 静态成员变量首先初始化(注意,Static可以看做一个静态成员,其执行顺序和其在类中申明的顺序有关)

    b 普通成员初始化

    c 执行构造函数。

     

    1 继承体系的所有静态成员初始化(先父类,后子类)

    2 父类初始化完成(普通成员的初始化-->构造函数的调用)

    3 子类初始化(普通成员-->构造函数)

    类的加载,类只有被用到的时候才会被加载,且只初始化一次。

     

    Super用来引用父类方法(仍旧无法访问private)。和显式的调用父类构造器

     

    Java不允许多重继承,但使用了接口实现了多重继承

    3、  多态

    实现多态的途径之一就是向上转型。

    就是子类,或者实现了一些接口的类,都可以使用父类或者那些接口去代替他本身的引用。

    向上转型的时候,父类的接口是无法访问子类里新增的方法和属性的。

    4、  接口,接口就是将声明和实现分割开来,使用interface修饰。

    与之对应的是抽象类,其中一些方法使用Abstract,强制子类实现它的方法。

    与之相关的是各种设计模式。

    四、容器

    l   Collection子接口之一:Set接口

    • Ø HashSet   LinkedHashSet   TreeSet

    l   Collection子接口之二: List接口

    • Ø ArrayList  LinkedList  Vector

    l   Map接口

    • Ø HashMap  TreeMap  Hashtable

    集合支持遍历,需要继承Iterable的接口,并实现其next和hasNext方法。

    TreeMap的排序需要继承comparable接口实现其compareto,或者实现一个comparator对象,为这个对象实现compare的方法。

    当要在map中写入自己定义的类的时候,要重写这个类的equal方法和hasCode方法。

    容器的具体方法参考文档。

    五、异常

    建议使用try catch的方法捕获异常

    自己实现异常

    手动抛出异常 throw

    六、String类

    String,StringBuffer与StringBuilder的区别

    String 字符串常量
    StringBuffer 字符串变量(线程安全)
    StringBuilder 字符串变量(非线程安全)

     String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String

    StringBuffer

             StringBuilder都有append方法,可以直接增加字符串。

    格式化字符串:

    1.         int x = 1;  
    2.         float y = 1.223f;  
    3.         System.out.printf("%d %f",x,y);  
    4.         System.out.println();  
    5.         System.out.format("%d %f",x,y); 

    可以用Formatter在控制台完美的控制间隔,不用你自己去数几个空格了。

    [java] view plaincopy

    1. public class TestString {  
    2.     public static void main(String[] args) {  
    3.         Formatter fm = new Formatter(System.out);  
    4.         fm.format("%-5s %5s %10s ", "Name","Age","School");  
    5.     }  
    6. }  

    %数字+s这样的表达像c,位置可以移动。

     

    [java] view plaincopy

    1. System.out.println(String.format("%h", 17));  
    2. nbsp;fm.format("%h", 17);  

    16进制的格式化输出。

    正则表达式:

          不用真心熟悉不起来,跳过。

    七、类型信息

    每一个类都对应着一个Class对象。

    • Ø 在运行时判断任意一个对象所属的类
    • Ø 在运行时构造任意一个类的对象
    • Ø 在运行时判断任意一个类所具有的成员变量和方法
    • Ø 在运行时调用任意一个对象的成员变量和方法
    • Ø 生成动态代理
    • Ø Class本身也是一个类
    • Ø Class 对象只能由系统建立对象
    • Ø 一个类在 JVM 中只会有一个Class实例
    • Ø 一个Class对象对应的是一个加载到JVM中的一个.class文件
    • Ø 每个类的实例都会记得自己是由哪个 Class 实例所生成
    • Ø 通过Class可以完整地得到一个类中的完整结构

    方法名

    功能说明

    static Class  forName(String name)

    返回指定类名 name 的 Class 对象

    Object newInstance()

    调用缺省构造函数,返回该Class对象的一个实例

    getName()

    返回此Class对象所表示的实体(类、接口、数组类、基本类型或void)名称

    Class getSuperClass()

    返回当前Class对象的父类的Class对象

    Class [] getInterfaces()

    获取当前Class对象的接口

    ClassLoader getClassLoader()

    返回该类的类加载器

    Class getSuperclass()

    返回表示此Class所表示的实体的超类的Class

    Constructor[] getConstructors()

    返回一个包含某些Constructor对象的数组

    Field[] getDeclaredFields()

    返回Field对象的一个数组

    Method getMethod(String name,Class  …  paramTypes)

    返回一个Method对象,此对象的形参类型为paramType

    实例化Class类对象(四种方法)

    1)前提:若已知具体的类,通过类的class属性获取,该方法

                        最为安全可靠,程序性能最高

           实例:Class clazz = String.class;

    2)前提:已知某个类的实例,调用该实例的getClass()方法获

                        取Class对象

           实例:Class clazz = “www.atguigu.com”.getClass();

    3)前提:已知一个类的全类名,且该类在类路径下,可通过

           Class类的静态方法forName()获取,可能抛出ClassNotFoundException

           实例:Class clazz = Class.forName(“java.lang.String”);

    4)其他方式(不做要求)

    ClassLoader cl = this.getClass().getClassLoader();

    Class clazz4 = cl.loadClass(“类的全类名”);

    实现了动态代理:

             待补

    八、泛型

    Java泛型没有其它语言的泛型那么有用,原因之一就是使用了擦除。擦除的核心动机是使得泛型化与非泛型化的代码之间能互相调用,是为了兼容。Java的设计者认为这是唯一可靠行的解决方案。如果Jdk1.0就引入了泛型,则不会有这个问题。

    Java的泛型因为历史的遗留问题,所以实行了擦除的原理。即所有类都在运行期间都将自动擦除成Object对象,丢失其原有的对象信息

    泛型方法 : public<T> void f(T x){}

    擦除。List<String>型的对象与List<Integer>型的对象,在运行时,其类型都被擦除为List。因此,在泛型机制下,无法获得有关泛型参数的运行时信息,像List<Integer>成为List,普通类型T则成为Object类型。这相比c++的模板机制,有很大的不足之处,弥补方法之一是使用泛型边界如<T extends ClassType>。

    边界Java泛型编程中使用extends关键字指定泛型参数类型的上边界(重写了extends关键字,与继承没有什么关系)

    Java泛型编程的边界可以是多个,使用如<T extends A & B & C>语法来声明,其中只能有一个是类,并且只能是extends后面的第一个为类,其他的均只能为接口

    泛型通配符:

    有个古怪循环,没搞懂什么意思,好像什么子类限定,自己限定自己子类的泛型?

    以后再研究。

    九、并发

    Executor 懒得补以后写。

  • 相关阅读:
    Java并发之ThreadPoolExecutor
    Java并发之同步工具类
    em和i , b和Strong 的区别
    OS应用架构谈(二):View层的组织和调用方案(中)
    iOS应用架构谈(二):View层的组织和调用方案(上)
    java(List或Array数组)求交集、并集、差集, 泛型工具类
    AES/DES 可逆性加密算法 -- java工具类
    用xtrabackup实现mysql的主从复制 阿里云rds到自己创建mysql
    java 生成二维码工具
    XDU 1022 (数论筛法+前缀和)
  • 原文地址:https://www.cnblogs.com/You0/p/4794835.html
Copyright © 2020-2023  润新知