zoukankan      html  css  js  c++  java
  • Java基础

    Java 2大运行机制:

    1.虚拟机JVM  :一个虚拟的计算机,具有指令集,负责执行指令、管理数据、内存、寄存器;不同平台有不同虚拟机:.java→编译.class→执行JVM(for windows、unix。。)

    2.垃圾收集机制GC:提供系统级进程跟踪存储空间分配,在JVM空闲时检查并释放空间,自动进行无法精确控制干预。

    Java特点:

    1.面向对象:类(抽象概念定义)、对象(实例);封装、继承、多态

    2.健壮性:对比c艹去掉指针、内存申请

    3.跨平台:JVM负责java程序在相应操作系统中的运行

    JDK:工具包;JRE:运行环境(体验:.java javac编译 java运行class文件)

    配置环境变量:java工具目录bin配置到path中,能javac即可

    一个java源文件只能一个public类

    native、strictfp、transient、volatile、assert  命名0-9_$

    包名:xxxyyyzzz     接口名类名:XxxYyyZzz    变量名函数名:xxxYyyZzz    常量名:XXX_YYY_ZZZ

    类{成员变量 方法{局部变量}}

    数据类型>基本数据类型+引用类型{类class{string字符串} 接口interface 数组[]}

    byte1 short2 int float4 long double8字节

    double>float>long>int>char+short>byte从下向上类型转换,上向下强制类型转换(精度降低或溢出),基本类型对应的包装类可以把字符串转换为基本类型

    封装类:Boolean、Byte、Short、Integer、Long、Character、Float、Doube

    int[] a  或者int a[]不能申明指定长度,只能创建指定如int a[]=new int[3]

    类和对象

    面向过程:结构体中函数是动宾关系;面向对象:主谓关系,

    类是抽象,对象是实例:定义类,声明创建类的对象,调用对象的方法

    栈内存存放地址?堆内存存放数据?栈内存指向对内存数据

    匿名对象:new Person().shout(),只用一次方法就可以用匿名对象,作为实参传递给函数调用

    类中同名方法的重载、父类方法的重写

    成员方法中的this,指向调用这个方法的对象

    jdk主要的包:lang(string math integer system thread)、net、io、util

    类设计

    extends:java类不能多重继承,只有一个父类,继承了父类的public、protected方法和属性

    super:调用父类的属性、方法、构造器,不仅限于直接父类。(this调用子类的构造方法,super父类的构造方法,不能同时出现;第一行不是this或super会自动加上,且同一个类只能实例化一次,所以只能放在第一行)

    多态:子类的对象可以替代父类的对象使用,父类类型的变量可以指向子类的对象。

      --声明为父类类型:属性是编译时确定的,编译时是父类,尽管引用的子类,但不能再访问子类添加的属性和方法

      --动态绑定:声明父类,调用方法时调用子类的方法。因为编译是父类,方法的调用是运行时确定的。

      方法的形参是父类,可以调用子类的形参作为实参调用

    ==比较两边的类型必须一致,equals是object的方法,只能比较引用类型。但比较File、String、Date、封装类比较类型类容不考虑是否是同一个对象。

    toString返回类名+引用地址,String类重写,返回字符串的值。

    高级特性

    static:也叫类成员,静态成员可以直接引用访问,静态方法内部只能访问静态属性,静态块常用来类属性初始化。

    abstract:只有方法声明没有实现

    interface:只有常量、方法的定义,没有变量和实现,一个类可以实现多个接口

    inner class:引用时必须给出完整名称,可以使用包含类的静态和实例成员变量,static内部类不能有static成员,非静态内部类只能有静态的final型常量。

    6.异常:

    error:JVM系统内部错误、资源耗尽等严重情况;Exception编程错误或偶然问题

    Throwable>(Error>LinkageError+VirtualMachineError+AWTError)+(Exception>(RuntimeException>类型转换+下标越界+空指针)+...+IOException)

    抓抛模型:抛出异常,从调用方法到调用者一级一级捕获,只针对Exception,Error无效

    try catch{getMessage()  printStackTrace()} finally  显式抛出异常

    7.集合

    Collection>List+Set+Queue

    Iterator迭代器{Iterator/remove/reationAll/toArray/next/hasNext}

    set{用equals判断}>

      (HashSet{hashCode存储,equals相等且hash相等才相等}

        >LinkedHashSet{hash存储位置,链表维护次序,看起来是插入顺序保存,访问性能高,插入性能略低})

      +TreeSet{comparator/first/last/lower/subSet/headSet/tailSet,支持自然排序和定制排序,实现SortedSet确保集合处于排序状态||自然排序:调用compareTo方法升序排序,把对象加入TreeSet必须实现Comparable接口必须实现compare方法||定制排序:创建TreeSet集合时提供一个Comparator接口的实现类对象}

    List{索引访问指定位置add/addAll/get/indexOf/lastIndexOf/remove/set/subList

    额外提供listIterator方法,返回ListIterator对象hasPrevious/previous/add}

      >vector线程安全

      +arrayList线程不安全{Arrays.asList返回一个固定长度的List集合}

    map{指定key找到唯一确定的Value clear/containsKey/containsValue/entrySet/equals/get/hashCode/isEmpty/KeySet/put/putAll/remove/size/values}

      >(HashTable{古老不建议用}

          >Properties{HashTable的子类,处理属性文件故都是字符串类型})

      +(HashMap{不能保证元素对的顺序,equals和hashCode返回ok}

          >LinkedHashMap{hashMap的子类,可以维护迭代顺序顺序与插入一致。})

      +TreeMap{存储时对key-value排序;自然排序:实现Comparable接口且key必须是同一个类的对象。定制排序:创建时传入一个Comparable对象负责对所有key排序,不需要map的key实现接口}

    Collections工具类

    操作Set List Map集合,排序{reverse/shuffle随机排序/sort/swap}、查询{max/min/frequency}、修改{replaceAll}等操作,

    对集合设置不可变、同步控制{synchronizedCollection.List.Map.Set.SortedMap.SortedSet多进程并发访问集合的安全问题}等方法

    Enumeration是Iterator的古老版本

    8.泛型(generics)

      List<Integer> myIntList = new ArrayList<Integer>();//把集合中的类型限定为特定的数据类型。

      myIntList.add(new Integer(0));

    <E>泛型:增加可读性,编译时检查增加稳定性

      public interface Iterator<E>{}

      若Foo是Bar的子类型,G是泛型,G<Foo>是G<Bar>的子类型并不成立

    ?通配符:Collection<Object>并不是任何Collections的父类,Collections<?>是父类

      public void drawAll(List<Shape> shapes){};//只能使用Shape的list来调用,不能对List<Circle>调用

      public void drawAll(List<? extends Shape> shapes);//可以是其子类任意通配符

    限制通配符:Shape是上限,代价是向shapes中写入是非法的,因为没有确定是什么类型。

      static void fromArrayToCollection(Object[] a, Collection<?> c){}//用一个object数组和一个collection作为参数,尝试把所有object放入collection中

    泛型方法:static <T> void fromArrayToCollection(T[] a, Collection<T> c){}//泛型方法,把方法的生命繁星花

    9.枚举类  

    枚举:

      enum定义的枚举类默认继承了java.lang.Enum类,构造器只能private,所有实例必须显式列出,自动添加public static final修饰,提供values方法遍历

    注解: 可以在编译、加载、运行时被读取,并执行相应的处理。不改变原有逻辑情况下补充信息。修饰包、类、构造器、方法、成员变量、参数、局部变量声明。

    @Override重写父类方法、@Deprecated元素已过时、@SuppressWarnings抑制编译器警告

    @Retention指定注解可以保留多久@Target指定修饰注解能修饰哪些程序元素@Documented将被javadoc工具提取成文档@Inherited被修饰的元素将具有继承性,子类自动拥有该注释。

    10.IO

      输入:外→程序内存中

    File类:

      操作平台无关的文件/目录,不能访问内容本身

      (File:文件名getName/renameTo检测exists操作createNewFile/delete/mkDir)

    IO流:

      输入流/输出流;字节流(8位字节)/字符流(16位字节);

      角色:节点流(从IO读写数据的流)/处理流(封装节点流连接来读写操作)

    InputStream & Reader:所有输入流的基类

      FileInputStream{int read(byte[] b)}

      Reader(int read[char[] c])

      文件IO资源不属于内存的资源,GC无法回收,应该显式关闭文件IO资源。

    OutputStream & Writer{write}

    对象序列化:

      序列化就是把对象保存到磁盘上,或者允许网上传输

      序列化是RMI远程方法调用必须实现的机制,后者是J2EE的基础

      必须实现两个接口之一:Serializable、Externalizable

      

    11.常用类

    String(String(char a[])startsWith/endsWith/compareTo/contains/indexOf/subString/trim)

      >基本数据的转化parseInt

      >getChars字符串放到数组中 toCharArray全部字符放到一个字符数组中

      >getBytes使用平台编码,将当前字符串转为字节数组

    StringBuffer{append效率低} &StringBuilder效率高

    Date{SimpleDateFormat/format}  (Random  Math)

    12.反射

    Class类、Java类加载机制、ClassLoader类加载、反射机制、Constructor、动态代理

    反射:运行时构造任意类的对象,获取。。,生成动态代理

    >Class:JRE为每一个保留一个Class对象,获得属性、方法、构造器,实现的接口

    类的对象newInstance

    Constructor对象:getConstructor、setAccessible

    method:获取getMethod(s) getDeclaredMethod     其方法invoke

    Annotation:get...

    泛型:getGenerSuperclass、泛型类型ParameterizedType、getActualTypeArguments获取实际的泛型参数数组

    创建动态代理Proxy:AOP

    ClassforName//getName/getSuperClass/getInterfaces/getClassLoader/getSuperclass

    +ClassLoader:把类装载进JVM

    13.多线程

    进程:系统运行一个程序就是从进程创建、运行、消亡的过程

    线程:程序中耽搁顺序的流控制,时间片

    创建多线程:1、创建Thread的子类,重写run方法。2创建Runnable的实现类,实现run方法

    run方法:线程运行时会执行的代码,start方法:启动一个新的线程,虚拟机调用其run方法

    线程的生命周期对Thread进行操作:new新建(start)调用了start可执行runnable(调度|←yield)运行run(sleep/其他线程join/IO被动)阻塞blocking(←interrupt)、死亡(IsAlive)

    线程调度:分时调度/优先级抢占调度

    线程安全:多线程应用访问共享对象时,抢CPU控制权,一个线程夹在另一个线程中可能导致执行错误。

    synchronized同步方法、同步代码块,区别是控制范围不同

    线程通信:线程的同步方法,其中某个变量需要其他线程修改才能符合,用wait出让cpu,notify唤醒结束等待

    记住:线程就是为了更好地利用CPU,提高程序运行速率的!

    what   why    how

    struts是线程安全的,但bug太多。

  • 相关阅读:
    前端 CSS 基础
    前端 HTML基础
    前端 JavaScript基础
    GoldenGate 复制进程报错"OGG-01296 Error mapping",丢弃文件报错“Mapping problem with delete record (target format)”,且实际条目存在
    SaltStack 与 Python 程序的结合
    SUSE-11 本地 zypper 配置
    Centos-7 + Docker-1.12 中 devicemapper + direct_lvm 的 Docker 存储配置
    Docker-v17 的层级(layer)概念
    Oracle-11g 中使用表空间透明数据加密(TDE)
    SaltStack 的远程执行机制
  • 原文地址:https://www.cnblogs.com/tabCtrlShift/p/5952897.html
Copyright © 2011-2022 走看看