美文网首页
java基础之基本常识

java基础之基本常识

作者: watayouxiang | 来源:发表于2017-05-13 22:26 被阅读20次

    数据类型

    • 基本数据类型
      • 整型
        • byte:1个字节
        • short:2个字节
        • int:4个字节(默认类型)
        • long:8个字节
      • 浮点型
        • float:4个字节
        • double:8个字节(默认类型)
      • 字符
        • char:2个字节
      • 布尔类型
        • boolean
    • 引用数据类型(类,接口,数组)

    位运算符

    • <<: 左移几位就乘以2的几次方
    • >>: 右移几位就除以2的几次方
    • >>>: 无符号右移运算符
    • <<<: 无符号左移运算符

    函数,构造函数,抽象类,接口

    • 函数
      • 函数也叫方法
      • 方法的重载(overload):方法名相同,参数不同
      • 方法的重写(override):
        • 存在继承关系中,子类重写父类方法
        • 子类方法权限一定要大于等于父类方法权限
        • 覆盖是重写的另一种叫法
        • 静态只能覆盖静态
    • 构造函数
      • 作用:用于给对象的属性进行初始化
      • 特点:
        • 你不定义空参数的构造函数,系统会自动给一个空参构造,你定义了构造函数无论是有参还空参的,系统就不再生成。
        • 子类中所有的构造方法默认都会访问父类中空参数的构造方法,因为每一个构造方法的第一行都有一条默认的语句super();
      • 重载构造函数:参数列表不同的构造函数
    • 抽象类(abstract)
      • 说明:abstract修饰的类就是抽象类
      • 抽象关键字abstract不可以和哪些关键字共存?
        • private:abstrac修饰的方法就是为了让子类继承并重写的
        • static:那么这个时候抽象方法就可以可以通过类名调用,但是这样是没有意义的
        • final:final修饰的方法不能被重写。所以它和abstract冲突
      • 应用:模版方法设计模式
    • 接口(interface)
      • 说明:interfacet修饰的类,所有的方法都是抽象的
      • 特点:
        • 只有成员变量和成员方法
        • 成员变量 默认修饰符 public static final
          • int X = 20;
          • 其实是这样的 public static final int X = 20;
        • 成员方法 默认修饰符 public abstract
          • void show();
          • 其实是这样的 public abstract void show();
        • 高内聚,低耦合:降低了程序的耦合性

    数组

    数组的定义:

    // 数组中元素未确定
    int[] arr = new int[3];
    int[0] = 3;
    
    // 数组元素已确定
    int[] arr = new int[]{1,2,3};
    int[] arr = {1,2,3};
    
    // 二维数组的定义
    int[][] arr = new int[3][2];
    int[][] arr = new int[3][];
    int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
    

    java内存机制

    栈:

    • 存放什么:基本数据类型,对象引用
    • 变量使用完后立即释放

    堆:

    • 存放什么:对象实体,数组
    • 堆内存的特点:
      • 每个实体都有内存地址
      • 堆内存变量都有默认初始化
      • 当实体不再使用时,会在jvm空闲的时候,通过垃圾回收机制GC回收

    方法区:

    • 存放什么:静态成员变量(类变量)

    异常(Exception)

    • Throwable

      • Error:重大问题
      • Exception:除了 RuntimeException 和其所有子类问题
      • RuntimeException:运行时报异常
        • ArrayIndexOutOfBoundsException:当你访问到数组中的最后一个元素时,还想继续访问,这个时候,会发生角标越界异常。
        • NullPointerException:当数组不在指向某个实体时,你还继续访问,就会发生空指针异常。
        • FileNotFoundException:创建FileInputStream对象, 指定一个文件. 当文件不存在时会抛出
    • 异常的处理:

        try{
            ...
        }catch(Exception e){
            ...
        }finally{ //关闭流,数据库等,释放资源
            ...
        }
      
    • Throwable类中常用的方法

      • getMessage():返回此 throwable 的详细消息字符串
      • toString():获取异常类名和异常信息,返回字符串
      • printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void
    • 自定义异常

      • 自定义类继承Exception或者其子类(RuntimeException)

    static和final关键字

    static关键字

    • 说明:static是 “静态” 关键字,可以修饰成员变量和成员方法
    • 什么时候使用:当类中的成员需要被所有对象共享时,用static修饰
    • 特点:
      • 随着类的加载而加载,随着类的消失而消失,生命周期最长
      • 优先于对象而存在
      • 被所有的对象所共享
      • 比非静态成员多了一种访问方式(类名.调用)
    • 静态成员变量(类变量)和非静态的成员变量(实例变量)的区别:
      • 存在内存中的位置:
        • 静态变量(类变量)随着类的加载,存在于方法区
        • 非静态成员变量(实例变量)随着对象的创建而建立,存在于堆内存
      • 生命周期:
        • 静态变量的生命周期长,随着类的消失而消失
        • 非静态成员变量的生命周期短,随着对象的消失而消失
      • 所属不同:
        • 静态变量也称为类变量,属于整个类,被整个类的对象所共享
        • 非静态成员变量也成为实例变量,是对象的特有数据,所属于对象

    final关键字

    • final可以用来修饰类:被fainl修饰的类不能被继承
    • final可以用来修饰成员方法:被final修饰的成员方法不能被重写。
    • final可以用来修饰变量:被final修饰的变量为常量,值不能被修改。

    代码块

    • 局部代码块
      • 一般语句顺序执行
    • 构造代码块
      • 每次创建对象都会被调用,用于初始化对象
    • 静态代码块
      • 只会执行一次,用于初始化类
      • 加载顺序:静态代码块-->构造代码块-->构造函数-->局部代码块
    public class Main {
        public static void main(String[] args) {
            Person p = new Person();
            p.test();
        }
    }
    
    class Person{
        static{
            System.out.println("静态代码块:只会执行一次,用于初始化类");
        }
        
        {
            System.out.println("构造代码块:每次创建对象都会被调用,用于初始化对象");
        }
        
        public Person() {
            System.out.println("构造函数:Person");
        }
        
        public void test(){
            System.out.println("A");
            {
                System.out.println("局部代码块:一般语句顺序执行");
            }
            System.out.println("B");
        }
    }
    
    /**
    静态代码块:只会执行一次,用于初始化类
    构造代码块:每次创建对象都会被调用,用于初始化对象
    构造函数:Person
    A
    局部代码块:一般语句顺序执行
    B
    */
    

    Object类的简单介绍

    • getClass():返回对象的运行时类
    • hashCode():哈希值
    • toString():打印
    • equals()
      • ==号和equals方法的区别:
        • ==号既可以比较基本数据类型,也可以比较引用数据类型,比较基本数据类型比较的是值,比较引用数据类型比较的是地址值
        • equals方法只能比较引用数据类型;equals方法在Object类中的定义比较的是引用数据的内存地址;但是我们在自定义类如果想比较对象中属性,就需要重写equals方法
    • finalize():垃圾收集器将对象从内存中清除出去之前做必要的清理工作

    StringBuilder和StringBuffer

    StringBuilder和StringBuffer的区别:

    • StringBuilder是线程不安全的,所以效率比较高,1.5版本出现
    • StringBuffer是线程安全的,效率相对较低,1.0版本出现的

    递归

    • 递归的好处:
      • 可以不知道循环次数 (方法调用次数)
    • 递归的弊端:
      • 有可能会栈内存溢出
    • 构造函数是否可以用递归?
      • 构造函数不能使用递归, 因为如果可以, 那将不断创建对象, 永不停止
    • 递归调用是否必须有返回值?
      • 递归调用可以有返回值也可以没有

    相关文章

      网友评论

          本文标题:java基础之基本常识

          本文链接:https://www.haomeiwen.com/subject/wvdfxxtx.html