Java基础

194 阅读4分钟

image.png

1.JAVA SE 标准版 面向桌面 2.JAVA ME 手机版 面向手机 3.JAVA EE 企业版 面向服务器

image.png

两种运行方式 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

image.png 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 (;;) { } 是死循环

数组三种初始化方式(数组大小是固定的,一旦被创建,不可被更改)

  1. 静态初始化:创建+赋值 => int[] a = {1,2,3,4,5}; 或 Man[] mans = {new Man(),new Man()};

  2. 动态初始化(包含默认初始化):int b = new int[10]; b[0]=1; b[1]=2;

  3. 默认初始化 int c = new int[10]; => c[0] == 0 / c[1] == 0

稀疏数组(本质上是个二维数组,行、列、值分别为下标0、1、2)

image.png

对象在堆中 值在栈中 堆中有个特殊的区域叫方法区

image.png

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() 下面。

image.png

重写: 1. 只能是非静态的方法

image.png

多态

image.png

image.png

高转低要强转 低转高直接转 对象的转换即 父类为高 子类为低 子类转父类可能会丢失一些方法

非静态方法可以调用静态方法的内容 静态方法不可以调用非静态方法的内容

image.png

image.png

image.png

image.png

类被final修饰后,无法继承,没有子类

abstract 抽象类只有方法没有实现,通过继承重写方法,有人帮忙实现

不能 new 抽象类,只能靠子类实现,是一个约束

抽象类中可以写普通方法,抽象方法必须在抽象类中

接口 interface 可以多继承 implements

接口中的方法默认为 public abstract

image.png

内部类:成员内部类、静态内部类、局部内部类、匿名内部类(new Apple().eat(); 不用将实例保存到变量中)

内部类可以访问外部类的私有属性/方法

一个java文件中可以有多个class 但只能有一个 public class

方法里的类称为局部内部类

image.png

throw new NullPointerException();

void test() throws NullPointerException() {}