native:就是一个java调用非java代码的接口,该方法的实现由非Java语言实现
strictfp:精确浮点的意思
super:可以在子类的构造方法显示的调用父类的方法
synchronized:同步方法,同步代码块
throws:在方法的头部声明异常不做处理 而throw则抛出异常
try catch:捕获代码块的异常并做处理
transient:修饰成员变量时,被修饰的变量不参与序列化过程
volatile:java提供的一种轻量级的同步机制,保障线程同步
goto:跳出多重循环c,c++中
整数类型:byte:1字节 short:2字节 int:4字节 long:8字节
小数类型:float:4字节 double:8字节
字符数据类型:char:2字节
布尔数据类型:boolean:1字节
值传递与引用类型的传递:
java值类型:byte,short,int,long,float,double,boolean,char(即八大基本类型)
java引用类型:类,接口,数组,String(也是类)
java中方法参数的传递都是值传递,且是值的拷贝传递。
java中方法传递参数时,如果是值类型的参数传递,对变量的修改,不会影响到方法外面。如果是引用类型的参数传递,变量会发生修改,并且影响到方法外面。
内存分配:
基本数据类型:保存在栈内存中的简单数据段,保存在内存中的一个位置。
引用类型值:在栈中仅仅是存储引用类型变量的地址,其本身存储在堆中。
1.堆和栈是java在RAM中存储数据的地方,java自动管理堆和栈,程序员不能直接设置;
2.栈的优势是:存取速度要比堆快,且数据可以共享;缺点是:存在栈中的数据大小与生命周期必须是确定的,缺乏灵活性。
3.堆的优势在于可以动态分配内存大小,生存期也不必事先告诉编译器,java的垃圾收集器会自动收走这些不再使用的数据,缺点是由于要在运行时动态分配内存,存取速度较慢。
4.栈中的数据可以共享,比如int a=3,b=3;一开始a=3开辟一个栈中的空间,当b=3时,发现有a了,就直接将b指向a指向的地址。
浮点数的科学计数法:
单精度浮点数float:32位,符号位S占1bit,指数E占8bit,尾数M占23bit
双精度浮点数float:64位,符号位S占 1 bit,指数 E 占 11 bit,尾数 M 占 52 bit
比如25.125的科学计数法:25.125(D)=11001.001(B)=1.1001001*2^4(B)
符号位:0 指数为补码:4+127=135=10000111 尾数:1001001(去掉1,隐藏位)变为001001
0 10000111 0010010000.....
Boolean类型数据占用几个字节:
当Boolean类型数据是数组中的元素时,就是1字节。
当Boolean类型数据是在Java语言表达式中时,就是4字节。(使用4字节的原因就是当下CPU是32位的,CPU32位寻址时,效率高)
final关键字:
作用:1.final修饰的类不能被继承 2.final修饰的方法不能被重写 3.final修饰的变量不能被修改
其中:被finall修饰的变量,不管是哪种变量,都是变量的引用不能被修改,而非引用所指向的内容。
static关键字:
被static修饰的成员变量或方法独立于该类的对象,只要该类被加载,可以在对象实例化之前访问。
静态变量:当JVM加载类时,可以通过类名直接访问,类的所有实例共享一个static变量。
静态方法:静态方法可以直接通过类名调用,但是不能直接访问所属类的实例变量和方法,只能访问所属类的静态变量和方法,这是因为实例成员只与特定对象关联。
静态代码块:为类中独立于类成员的static语句块,不在任何方法体内,当JVM加载类时,就会执行静态代码块,无需等待实例化,static语句块可以多个,JVM会按照它们的先后顺序依次执行。