java基础总结大全
一、 基础知识: 1、JVM、JRE 和 JDK 的区别: JVM(Java Virtual Machine):java 虚拟机,用于保证 java 的跨平台的特性。 java 语言是跨平台,jvm 不是跨平台的。 JRE(Java Runtime Environment):java 的运行环境,包括 jvm+java 的核心类库。 JDK(Java Development Kit):java 的开发工具,包括 jre+开发工具 2、环境变量 path 和 classpath 的作用是什么? (1)path 是配置 Windows 可执行文件的搜索路径,即扩展名为. 的程序文件所在的目录, 用于指定 DOS 窗口命令的路径。 (2)Classpath 是配置 class 文件所在的目录,用于指定类搜索路径,JVM 就是通过它来寻找该类的 class 类文件的。 3、变量有什么用?为什么要定义变量?什么时候用? 答:变量的作用:用来存储数据。 为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用 4、在内存中做了哪些事情。 (1)将 Person.class 文件加载进内存中。 (2)如果 p 定义在主方法中,那么,就会在栈空间开辟一个变量空间 p。 (3)在堆内存给对象分配空间。 (4)对对象中的成员进行默认初始化。 (5)对对象中的成员进行显示初始化。 (6)调用构造代码块对对象进行初始化。(如果没有就不执行) (7)调用构造方法对对象进行初始化。对象初始化完毕。 (8)将对象的内存地址赋值给 p 变量,让 p 变量指向该对象。 11、static 关键字: (1)静态的意思,用来修饰成员变量和成员函数 (2)静态的特点: 随着类的加载而加载 优先于对象存在 对所有对象共享 可以被类名直接调用 (3)静态的注意事项 A:静态方法只能访问静态成员 为什么:因为静态的内容是随着类的加载而加载,它是先进内存的。 B:静态方法中不能使用 this,super 关键字 C:主方法是静态的 public static void main(String[] args) public:公共的意思,是最大权限修饰符。 static:由于 jvm 调用 main 方法的时候,没有创建对象。 只能通过类名调用。所以,main 必须用 static 修饰。 void:由于 main 方法是被 jvm 调用,不需要返回值。用 void 修饰。 main:main 是主要的意思,所以 jvm 采用了这个名字。是程序的入口。 String[]:字符串数组 args:数组名 在运行的时候,通过 java 命令给 args 数组赋值。 格式:java MainTest hello world itcast (4)静态变量和成员变量的区别 A:调用方式 静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用。 这个变量属于类。 成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。 B:存储位置 静态变量存储在方法区长中的静态区。 成员变量存储在堆内存。 C:生命周期 静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。 成员变量随着对象的创建而存在,随着对象的消失而消失。 D:与对象的相关性 静态变量是所有对象共享的数据。 成员变量是每个对象所特有的数据。 (5)静态的优点和弊端 优点: 对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份 可直接被类名调用 弊端: 生命周期过长,随着类的消失而消失 访问出现权限,即静态虽好但只能访问静态 (6)什么使用使用静态呢? A:当所有对象共享某个数据的时候,就把这个成员变量定义为静态修饰的。 B:当某个方法没有访问该类中的非静态成员,就可以把这个方法定义为静态修饰。 静态的生命周期比较长,所以一般不推荐使用。 (7)静态代码块 A:它只执行一次,它比 main 还先执行。 B:执行顺序 静态代码块--构造代码块--构造方法 12、制作 API(次重点) API(全拼):Application Program Interface 应用程序编程接口。 (1)类中的内容需要用文档注释。 (2)使用 JDK\bin 目录下的 javadoc 工具。 格式:javadoc -d 目录 -author -version ArrayTool.java 13、单例设计模式: (1)设计模式: 解决某类问题行之有效的方法,是一种思想,是规律的总结 (2)用来保证某个类在内存中只有一个对象 (3)保证唯一性的思想及步骤 **为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化 **为了其他程序访问到该类对象,须在本类中创建一个该类私有对象 **为了方便其他程序访问到该类对象,可对外提供一个公共访问方式 比如 API 中的 Runtime 类就是单例设计模式。 (4)单例设计模式的两种方式 A:饿汉式 当类加载的时候,就创建对象。 class Student { private Student(){} private static final Student s = new Student(); public static Student getInstance() { return s; } } B:懒汉式 当使用的使用,才去创建对象。 class Student { private Student(){} private static final Student s = null; public static Student getInstance() { if(s==null) { //线程 1 就进来了,线程 2 就进来了。 s = new Student(); } return s; } } 饿汉式和懒汉式的区别: ** 饿汉式是类一加载进内存就创建好了对象; 懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了 getInstance()方法时, 对象才开始创建。 ** 懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题 可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了, 所以可以加双重判断来提高程序效率。 注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题 14、Math 类的使用(重点) (1)数学操作类:该类没有构造函数,方法均为静态的 (2)掌握内容 A:成员变量 **E:比任何其他值都更接近 e(即自然对数的底数)的 double 值。 **PI:比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。 B:成员方法 **static double abs(double a) 返回 double 值的绝对值。返回绝对值 **static double ceil(double a) 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。 **static double floor(double a) 返回最大的(最接近正无穷大)double 值,该值小于