• java基础知识(一)


    一、Java虚拟机

    JVM (java Virtual Machine)

    • 平台无关性 :平台(硬件+软件<操作系统>)
    • 安全性: 沙箱(放置不可靠java程序)
    • 网络移动性: Java Applet(Java 小应用)

    抽象规范

    一个具体实现

    一个运行中的虚拟机实例

    运行时java虚拟机(JVM)天职:负责运行一个Java程序

    1、JVM体系结构

    封装:(类内的私有属性)

    访问私有对象方法:

    • 将属性私有化(private)
    • 为私有属性添加getter和setter方法(如果有需要的话,可在方法中加入业务逻辑-限制使用

    常见Bean结构

    • 构造器
    • 属性
    • 生成方法(getter和setter方法)

    2、static(修饰符)

    只修饰类成员,不修饰局部变量

    • 属性 -类共享
    • 方法
    • 块 (只执行一次)执行最快,(常用于加载一次外部数据,eg配置文件)

    静态属性

    • 所有对象共享(类变量)
    • 访问: 类名.属性, 非静态属性:对象名(实例).属性

    静态方法(static function)

    • 可直接访问静态变量,如要访问非静态变量,必须先实例化
    • 静态方法不能用this
    • 静态方法不能被非静态方法覆盖

    访问方式:类名.方法名()

    实例化后的对象访问 对象名.方法名()

    二、类的继承

    Java中单继承:一个类只能有一个父类

    格式: 修饰符 class 子类名 extends 父类名
    

    1、子类:派生类 父类:基类

    • 子类可以继承父类的私有属性,但却用不了
    • 子类实例化:先实例化父类,然后实例化子类

    super()

    作用:调用父类的构造器

    只出现在子类的构造器,必须第一行

    this()

    作用:只调用本类构造器,第一行

    super 对父类的引用 ||this 子类自己的引用

    2、方法的覆盖(Override/Overwrite)

    方法重写

    • 要求子类继承父类
    • 要求子类的方法与父类的方法签名()完全一致

    3、关键字 final

    修饰对象

    • 变量(属性、局部变量、形参):不能重新赋值---(在声明时或者构造器中赋值)
    • 方法:不能被覆盖,不能被修改,

    常配合static修饰符使用

    对于基本类型,不可变指的是值;

    对于引用类型,不可变指的是引用地址,引用的值可变

    常量命名字母要求大写

    4、抽象类

    含有抽象方法的类声明为抽象类

        //格式: 
        public abstract class ClassName 
        public abstract void methodName()
    

    继承抽象父类的子类必须重写抽象方法

    抽象类需要构造器(给子类使用)

    • 不能实例化
    • 其包含的抽象方法必须在其子类实现,否则该子类只能声明为abstract
    • 抽象方法不能为static
    • 抽象类中可以没有抽象方法,但有抽象方法的类一定时抽象类

    抽象父类

    • 起约束的作用,从设计角度
    • 声明了一个规范

    5、引用数据类型的转换(类之间)

    前提:具有继承关系

    原则:子类就是父类

    向上造型

    子类转换为父类,自动转换

    • 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能
    • 所有的子类都可以替换为父类的对象
    • 子类 is a 父类

    向下造型-CAST(强制转换)

    父类对象必须是经过向上造型的对象

    向上转换损失了子类新扩展的属性与方法,仅剩父类声明的属性与方法

    三、接口

    1、多态

    同一个动作,根据不同对象使产生不一样的结果

    遵守引用类型的转换规则

    赋值多态/传参多态

    作用:

    • 1、方便程序系统的扩展
    • 2、利于系统后期的维护

    2、接口(Interface)

      public interface IntfName
      public class ClassName implements IntfName
    

    不是一个类,不能实例化

    常量、抽象方法的集合

    一套规范、一套行为协议

    若一个类要实现一个接口,那这个类必须实现接口中的所有抽象方法,否则这个类只能声明为抽象类

    • 接口中定义的变量都是公共静态变量
    • 接口中没有自己的构造函数,而且接口中定义的方法全部都是抽象方法,即只提供方法的定义,没有提供方法的具体实现
    • 接口采用多继承制,而不像类一样采用单继承机制
     public interface InterfaceName{
         public returnDataType method1Name(InParamType in);
         public returnDataType method2Name(InParamType in);
         ...
     }
     
    

    四、异常处理

    抛出异常结构图如下;

    graph RL A[RuntimeException]-->B[Exception] C[IOException]-->B D[error]-->E[Throwable] B-->E E-->F[Object]

    处理方式:

    • try/catch 块
    • 抛出

    1、可以有多个catch块来处理不同类型异常

    2、没有try块,catch块不能存在

    3、如果程序抛出多个异常,需要多个catch块来处理

    4、出现异常后,后面的语句不执行

    4.2、finally块 (try/catch 块之后存在)

    关闭流,关闭连接、释放资源

    不论是否发生异常,都会执行finally块。(执行try/catch 块后)

    4.3、throw语句

    抛异常:(开发:分层次开发)

    throws

    标识该方法可能会产生的异常类型

    作用:声明一个成员函数可能抛出的各种异常

    位置:函数头的后面

    五、常见API与常用类

    1、用import导入包

    //导入包中所有类
    import package_name.*;
    //导入单个类
    import package_name.class_name;
    

    2、JDK常用包

    java.lang (java语言包)自动导入

    java.util 实用工具(list、calendar、date所需的类和接口)

    java.awt 图形用户

    java.io

    java.net (TCP/IP 类/接口)

    java.sql (数据库访问包)

    3、包装类

    对基本数据类型进行包装(基本数据类型可通过构造器转换为包装类)

    • boolean --> Boolean
    Boolean b=new Boolean(true);
    
    • int --> Integer
    //Integer有个parseInt方法把String转换为int
    int i=Integer.parseInt(String);
    
    • ......

    4、String类

    代表一组不可改变的unicode字符序列

    equals() 是Object类的方法

    • equals() 在String类中比较字符串相等
    • equals() 在其他引用类中比较地址

    String类常用方法

     //返回全大写字符串
     public String toUpperCase();
     
     //返回全小写字符串
     public String toLowerCase();
     
     //截取字符串
     public boolean subString(int startIndex)
     
     //
     public char charAt(int index)
     
     //
     public int Indexof(char ch)
     
     //
     public String trim()
     
     //
     public int length()
     
     replace、split、startWith、endWith、contains
    

    5、StringBuffer

    用于内容可以改变的字符串

    //此构造一个字符串缓冲区初始化为指定字符串的内容。
    //StringBuffer(String str)
    StringBuffer sb=new StringBuffer("haha");
    System.out.println(sb.toString);
    
    //常见方法
    //此方法将指定的字符串追加到此字符序列
    public StringBuffer append(String str) 
    
    //此方法将char数组参数插入到这个序列的字符串表示形式
    public StringBuffer insert(int offset, char[] str)
    
    //此方法替换这个序列中的特定字符串的子字符串
    public StringBuffer replace(int start, int end, String str)
    
    //此方法使该字符序列的序列反向替换
    public StringBuffer reverse()
    
    

    6、Object类

    所有类的父类

    • 1、在Object类中定义的方法在所有类中都可以使用
    • 2、一个类可以不是Object类的直接子类,但一定是Object类的子类,Java中的每一个子类都是从Object类扩展来的
    • 3、Object类 Java语言中唯一一个没父类的类

    Object类常用方法

     //返回16进制整数,唯一标识一个对象
     public int hashCode();
     
     //返回 类名@hashCode
     public String toString();
     
     //比较两个对象引用的值是否相等(比较地址)
     public boolean equals(Object obj)
    

    7、Math类

    常用方法

    //天花板  返回大于或者等于参数的最小整数
    java.lang.Math.ceil(double a)
    
    //地板  返回小于或者等于参数的最大整数
    java.lang.Math.ceil(double a)
    
    //幂方法  相当于a^b
    java.lang.Math.pow(double a, double b)
    
    //返回最接近参数的整数,若2个double值都接近参数,返回偶数
    java.lang.Math.rint(double a)
    

    六、集合

    • 1、Java中集合类是用来存放对象的
    • 2、其中每个对象作为集合中的一个元素出现

    数组可以有多维,而集合不存在这样的概念

    graph RL A[ArrayList]-->|implements|L[List-interface] B[LinkedList]-->|implements|L S[Stack]-->V[Vector] V-->L H[HashSet]-->|implements|C[Set-interface] T[TreeSet]-->|implements|C C-->|extends|D[Collection] L-->|extends|D E[HashMap]-->|implements|M[Map-interface] F[HashTable]-->|implements|M G[TreeMap]-->|implements|M M-->O[object] D-->O J[ListIterator]-->K[Iterator] K-->O

    1、Collection接口

    集合类接口在java.util包中

    常用方法

    add
    clear
    remove
    size
    

    2、List

    add
    

    ArrayList

    //构造器 
    ArrayList()
    
    //可以避免频繁的装拆箱操作
    ArrayList<E>()//泛型
    

    LinkedList

    最主要可以在list头部尾部增删,取得元素

    ArrayList与LinkedList区别

    • ArrayList当遍历时效率高,适合随机查询
    • LinkedList 元素插入、删除操作性高,功能上LinkedList多一些

    3、Map接口(字典)

    内存储的是键/值对这样以成对的对象组

    通过“键”对象来查询“值”对象

    Map中,key值唯一

    key对象与value对象关联一起的

    Map的遍历(转换为Collection)

    • values()返回的是 V 值集合,是一个 list 集合对象;
    • keySet()返回的是 K 值集合,是一个 Set 集合对象;
    • entrySet()返回的是 K-V 值组合集合
     //获取所有的 key,根据 key 取出对应的value
     for (String key : map.keySet())
     
     //遍历所有的value,舍弃key
     for (String value : map.values())
     
     //取出对应的 key,value 键值对,容量大时推荐使用
     for (Map.Entry<String, String> entry : map.entrySet())
     
     //通过 Map.entrySet使用iterator遍历 key 和 value 
     Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
        Map.Entry<String, String> entry = iterator.next();
        System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
     }
     
     //map.forEach JDK1.8 新特性 
     map.forEach((key, value) -> {
            System.out.println("key=" + key + ",value=" + value);
     });
     
    
    Map类 Key Value Super 说明
    Hashtable 不允许为null 不允许为null Dictionary 线程安全
    Concurrenthashmap 不允许为null 不允许为null AbstratMap 分段锁技术
    TreeMap 不允许为null 允许为null AbstratMap 线程不安全
    HashMap 允许为null 允许为null AbstratMap 线程不安全
  • 相关阅读:
    后缀树(suffix tree)
    哈希表(Hash Table)
    ansible报错Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this
    windows上python上传下载文件到linux服务器指定路径【转】
    MySQL参数最大连接数max_connections
    linux服务器last查看关机记录
    /etc/fstab文件详解【转】
    MySQL5.7更改用户名密码
    awk对列/行进行统计求和【转】
    passwd: Have exhausted maximum number of retries for service【转】
  • 原文地址:https://www.cnblogs.com/hijackhou/p/12833828.html
Copyright © 2020-2023  润新知