主要应用于桌面应用软件的编程。
主要应用于嵌入式系统开发,如机顶盒、移动电话和PDA之类嵌入式消费电子设备。
主要应用于分布式的网络程序的开发,web端,服务器开发
JDK(Java Development Kit),java开发工具集,在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以 认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
JRE(Java Runtime Environment,Java运行环境),JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具 (如编译器和调试器)。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在 实际的计算机上仿真模拟各种计算机功能来实现的。
1.每个线程包含一个栈区,栈中只保存基本数据类型的数据和自定义对象的引用(不是对象),对象都存放在堆区中。
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本数据类型的变量区、执行环境上下文、操作指令区(存放操作指令)。
类的对象放在heap(堆)中,所有的类对象都是通过new方法创建,创建后,在stack(栈)会创建类对象的引用(内存地址)。
1.又叫静态区,跟堆一样,被所有的线程共享。
2.方法区中存放的都是在整个程序中永远唯一的元素。这也是方法区被所有的线程共享的原因。
方法区保存的就是一个类的模板,堆是放类的实例(即对象)的。栈是一般来用来函数计算的。
封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏 对象的内部实现细节。
1.需要修改属性的访问控制符(修改为private);
2 创建getter/setter方法(用于属性的读写);
3 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性)。
一个对象的实际类型是确定的,可以指向的引用类型就不确定了:父类的引用指向子类。
引用类型:除了基本数据类型,其他的类型都是引用类型。
子类能调用的方法都是自己的或者继承父类的。
父类型可以指向子类型,但是不能调用子类独有的方法。
对象能执行哪些方法,主要看主要看对象左边的类型,和右边的关系不大。
Father f1=new Son(); //Father为父类,Son为子类
//父类中有一个show1方法
//子类中有一个独有的show2方法
((Son) f1).show2(); //对象想要调用子类独有的方法需要强制转换为子类型。
1.即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
2.一个对象的实际类型是确定的,但是可以指向对象的引用类型有很多。
3.多态存在的条件
A.有继承关系时
B.子类重写父类方法
C.父类引用指向子类对象
多态是方法的多态,属性没有多态性
1.类型之间的转换:父 子
2.子类转换为父类可能会丢失自己本来的一些方法
3.向上转型:子类转换到父类
4.向下转型:父类转换为子类,有时需要用到强制转换调用一些子类独有的方法
import static java.lang.Math.random //导入包
/*使用了静态导入包
当需要用到这些包下的方法时,可以直接用方法名调用
如
*/
rando();
//就可以直接调用random方法
public class Test{
{
//匿名代码块
}
static{ //只执行一次
//静态代码块
}
}
//执行顺序 先静态代码块 再匿名代码块,最后构造方法
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(); //主动抛出的异常,一般在方法中使用
}
}