Java基础知识

Java基础知识

1.Java三大版本

1.1JavaSE:标准版

​ 主要应用于桌面应用软件的编程。

1.2. JavaME:微型版

​ 主要应用于嵌入式系统开发,如机顶盒、移动电话和PDA之类嵌入式消费电子设备。

1.3. JavaEE:企业版

   主要应用于分布式的网络程序的开发,web端,服务器开发

2.JDK,JRE,JVM

2.1.JDK

​ JDK(Java Development Kit),java开发工具集,在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以 认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。

2.2.JRE

​ JRE(Java Runtime Environment,Java运行环境),JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具 (如编译器和调试器)。

2.3.JVM

​ JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在 实际的计算机上仿真模拟各种计算机功能来实现的。

2.4.三者联系

Java基础知识_第1张图片

3.内存分析

Java基础知识_第2张图片

3.1.栈

​ 1.每个线程包含一个栈区,栈中只保存基本数据类型的数据和自定义对象的引用(不是对象),对象都存放在堆区中。
​ 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
​ 3.栈分为3个部分:基本数据类型的变量区、执行环境上下文、操作指令区(存放操作指令)。

3.2.堆

​ 类的对象放在heap(堆)中,所有的类对象都是通过new方法创建,创建后,在stack(栈)会创建类对象的引用(内存地址)。

3.3.方法区

​ 1.又叫静态区,跟堆一样,被所有的线程共享。

​ 2.方法区中存放的都是在整个程序中永远唯一的元素。这也是方法区被所有的线程共享的原因。

方法区保存的就是一个类的模板,堆是放类的实例(即对象)的。栈是一般来用来函数计算的。

Java基础知识_第3张图片

4.Java三大特性

4.1.封装

​ 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏 对象的内部实现细节。

​ 1.需要修改属性的访问控制符(修改为private);
​ 2 创建getter/setter方法(用于属性的读写);
​ 3 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性)。

4.2.继承

​ 一个对象的实际类型是确定的,可以指向的引用类型就不确定了:父类的引用指向子类。

引用类型:除了基本数据类型,其他的类型都是引用类型。

​ 子类能调用的方法都是自己的或者继承父类的。

​ 父类型可以指向子类型,但是不能调用子类独有的方法。

​ 对象能执行哪些方法,主要看主要看对象左边的类型,和右边的关系不大。

Father f1=new Son();   //Father为父类,Son为子类
//父类中有一个show1方法
//子类中有一个独有的show2方法
((Son) f1).show2();   //对象想要调用子类独有的方法需要强制转换为子类型。

4.3.多态

​ 1.即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。

​ 2.一个对象的实际类型是确定的,但是可以指向对象的引用类型有很多。

​ 3.多态存在的条件

​ A.有继承关系时

​ B.子类重写父类方法

​ C.父类引用指向子类对象

多态是方法的多态,属性没有多态性

4.4.类型转换

​ 1.类型之间的转换:父 子

​ 2.子类转换为父类可能会丢失自己本来的一些方法

​ 3.向上转型:子类转换到父类

​ 4.向下转型:父类转换为子类,有时需要用到强制转换调用一些子类独有的方法

5.静态导入包

import static java.lang.Math.random  //导入包
 /*使用了静态导入包
 当需要用到这些包下的方法时,可以直接用方法名调用
 如
 */
  rando();
//就可以直接调用random方法

6.代码块

public class Test{
    {
        //匿名代码块
    }
    
    static{  //只执行一次
        //静态代码块
    }
}
//执行顺序 先静态代码块 再匿名代码块,最后构造方法

7.异常

Java基础知识_第4张图片

1.Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子 类。异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。

2.Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

3.Exception(异常:是程序本身可以处理的异常。

1.运行时异常:都是RuntimeException类及其子类异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异 常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就 是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
2.非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进 行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下 不自定义检查异常。

4.常见的异常:
1. RuntimeException子类:

​ ArrayIndexOutOfBoundsException:数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

​ NullPointerException:空指针异常。

​ NegativeArraySizeException:数组长度为负异常

​ ArithmeticException :算术条件异常。譬如:整数除零等。

​ IllegalArgumentException:非法参数异常

​ ArrayStoreException :数组中包含不兼容的值抛出的异常 。

2.IOException

​ IOException:操作输入流和输出流时可能出现的异常

​ FileNotFoundException:文件未找到异常

​ EOFException:文件已结束异常

3. 其他

​ ClassCastException: 类型转换异常类

​ ArrayStoreException: 数组中包含不兼容的值抛出的异常

​ SQLException: 操作数据库异常类

​ NoSuchFieldException:字段未找到异常

​ NoSuchMethodException:方法未找到抛出的异常

​ StringIndexOutOfBoundsException:字符串索引超出范围抛出的异常

​ NumberFormatException:字符串转换为数字抛出的异常

​ ClassNotFoundException:找不到类异常。

4. 捕获异常:try、catch 和 finally

1.try-catch语句

//假设要捕获多个异常,类型从小到大
try {
    // 可能会发生异常的程序代码
} catch (Exception e){
    // 捕获并处置try抛出的异常
}
catch (Throwable t){
     //捕获并处置try抛出的异常类型
}

try{
    System.out.println(a/b);
}catch(ArithmeticException e){
    System.out.println("变量b不能为0");
}

2.throw

if(b==0){
    throw new ArithmeticException();   //主动抛出异常
}
System.out.println(a/b);

3.throws

public void test(int a,int b) throws ArithmeticException{  //假设这个方法中处理不了这个异常,方法上抛出异常
	if(b==0){
      throw new ArithmeticException();    //主动抛出的异常,一般在方法中使用
	}
}

你可能感兴趣的:(Java基础知识)