廖雪峰-java教程-Part01
快速入门
不同语言区别
- 编译型语言-事先将源代码通过编译器编译成机器语言,生成可执行文件(运行快,开发慢)
- 解释型语言-在运行时解释器逐行解释执行,没有可执行文件(运行效率低)
- java-将源代码编译为字节码,针对不同平台开发jvm,负责加载字节码并执行(一次编译,到处运行)
Java版本
- Java SE:Standard Edition
- Java EE:Enterprise Edition
- Java ME:Micro Edition
- JDK:Java Development Kit Java开发工具包
- JRE:Java Runtime Environment Java运行环境
- IDE:Integrated Development Environment 集成开发环境
数据类型
- java中整型都是有符号的(包括正数、负数、0)
- 整型范围 最小值:-2ⁿ⁻¹ 最大值:2ⁿ⁻¹ - 1
- 整型默认为int,浮点型默认为double
- float f3 = 1.0; // 不带f结尾的是double类型,不能赋值给float(float类型结尾要加f)
- 字符串类型不可变!!!
面向对象基础
- 可变参数 public void setNames(String... names)
- 构造方法 自动生成默认构造方法,如果自己定义了则不会生成默认构造方法
- 方法重载overload:同一个类中,方法名相同参数不同;方法重写override:子类重新定义父类方法,方法名、参数列表、返回类型都必须相同
- java中一个类至多有一个父类,Object没有父类
访问修饰符
权限修饰符 关键字 说明 同类 同包 不同包的子类 不同包的非子类 private private
私有的,只能在当前类内部访问,外部(包括子类)不可见 ✅ ❌ ❌ ❌ 默认(包级私有) 无修饰符(不写) 也称为 包访问权限(package-private),只能被同一个包中的类访问 ✅ ✅ ❌ ❌ protected protected
受保护的,可以被同一个包内的类以及不同包中的子类访问 ✅ ✅ ✅ ❌ public public
公开的,可以被任何类访问,没有任何限制 ✅ ✅ ✅ ✅ - 如果父类没有默认的构造方法,子类就必须显式调用
super()
并给出参数以便让编译器定位到父类的一个合适的构造方法。(先有父后有子) - 多态:针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法
- 接口interface:如果一个抽象类中没有字段则可以写为接口(比抽象类还抽象),一个类可以实现多个接口,不同于抽象类只能继承一个
- 接口不能有实例字段,但是可以有静态字段public static final(并不是不能拥有字段)
- default方法
interface Person {String getName();default void run() {System.out.println(getName() + " run");} }
- 内部类、匿名内部类、静态内部类
// Anonymous Class import java.util.HashMap;public class Main {public static void main(String[] args) {HashMap<String, String> map1 = new HashMap<>();HashMap<String, String> map2 = new HashMap<>() {}; // 匿名类!HashMap<String, String> map3 = new HashMap<>() {{put("A", "1");put("B", "2");}};System.out.println(map3.get("A"));} }
map1
是一个普通的HashMap
实例,但map2
是一个匿名类实例,只是该匿名类继承自HashMap
。map3
也是一个继承自HashMap
的匿名类实例
- classpath:指示jvm如何找到class,java核心库不需要添加到classpath;jar包:将package包打包为一个jar/zip文件;要创建jar包只需要压缩为zip将后缀改为jar