1.JAVA SE 标准版 面向桌面 2.JAVA ME 手机版 面向手机 3.JAVA EE 企业版 面向服务器
两种运行方式 javac .java 文件 运行后会生成 .class 文件 java .class 文件 也可以运行
java大小写敏感
.java文件经过java编译器生成.class字节码文件,然后进入JVM,启动类装载器,把类加载到jvm中,然后启动字节码校验器,检查代码是否正确,错误则报错,正确则进入解释器,解释成机器语言发送至操作系统平台执行程序。
整数拓展 int 的进制 二进制0b 八进制0 十进制 十六进制0x
int i1 = 10; // 十进制 int i2 = 010; // 八进制 int i3 = 0x10; // 十六进制
输出结果 i1 = 10; i2 = 8; i3 = 16;
float f1 = 123123123123F; float f2 = f1 + 1; 判断是否箱等
所有的字符本质还是数字,char对应着一个unicode表 f1 == f2 => true
unicode范围 U0000 - UFFFF
byte short char -> int -> long -> float -> double
强制转换 高到低 自动转换 低到高
JDK7新特性,数字之间可以加下划线 1_0000_0000
total2还是负数
public class Demo {
int age; // 从属于对象 必须使用 new Demo().age;调用
static int name; // 从属于类 可以直接使用 }
long int short byte相加 有long则最终为long 没long则最终一定是int
位运算
二进制位运算
A = 0011 1101
B = 0010 1011
A&B A与B 每位对比,不相同则为0 => 0010 1001
A|B A或B 每位对比,不相同则为1 => 0011 1111
A^B A异或B 每位相同则为0否则为1 => 0001 0110
~B B取反 => 1101 0100
位运算效率高
0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16
左移 << 左移一次相当于*2
2<<3 == 16 == 222*2
右移 >> 右移一次相当于/2
16>>3 == 2 == 16/2/2/2
int a = 10; int b = 10;
""+a+b => 1020 String.class
a+b+"" => 30 String.class
javadoc -encoding UTF-8 -charset UTF-8 xxx.java 生成JAVA文档
for (;;) { } 是死循环
数组三种初始化方式(数组大小是固定的,一旦被创建,不可被更改)
-
静态初始化:创建+赋值 => int[] a = {1,2,3,4,5}; 或 Man[] mans = {new Man(),new Man()};
-
动态初始化(包含默认初始化):int b = new int[10]; b[0]=1; b[1]=2;
-
默认初始化 int c = new int[10]; => c[0] == 0 / c[1] == 0
稀疏数组(本质上是个二维数组,行、列、值分别为下标0、1、2)
对象在堆中 值在栈中 堆中有个特殊的区域叫方法区
java只有单继承,没有多继承
私有的无法被继承
public class Student extends Person { public Student() { System.out.println("a"); } }
public class Person { public Person() { System.out.println("b"); } }
输出结果为 b a
原因是 在子类调用的时候,会先隐式的执行父类构造器,即在Student()构造器中,完整的代码应为
public class Student extends Person { public Student() { super(); // 指向Person(); System.out.println("a"); } }
注意:调用父类构造器,必须在子类构造器的第一行。比如 super();不能在 sout() 下面。
重写: 1. 只能是非静态的方法
多态
高转低要强转 低转高直接转 对象的转换即 父类为高 子类为低 子类转父类可能会丢失一些方法
非静态方法可以调用静态方法的内容 静态方法不可以调用非静态方法的内容
类被final修饰后,无法继承,没有子类
abstract 抽象类只有方法没有实现,通过继承重写方法,有人帮忙实现
不能 new 抽象类,只能靠子类实现,是一个约束
抽象类中可以写普通方法,抽象方法必须在抽象类中
接口 interface 可以多继承 implements
接口中的方法默认为 public abstract
内部类:成员内部类、静态内部类、局部内部类、匿名内部类(new Apple().eat(); 不用将实例保存到变量中)
内部类可以访问外部类的私有属性/方法
一个java文件中可以有多个class 但只能有一个 public class
方法里的类称为局部内部类
throw new NullPointerException();
void test() throws NullPointerException() {}