一般是安装java8,大部分使用的版本是java8;
然后需要部署java环境变量
javac 文件名.java
编译命令为
java 文件名
配置classpath
路径为.\为当前路径下的class文件名
成员变量:类里面的变量
局部变量:方法里面的变量
变量不能重复定义,在上一级作用域中已经声明的变量在该作用域里不能再次声明该变量
八大基本数据类型↓
多少进制就是多少进1;我们日常用的是十进制
进制转换:
二进制1101转十进制为 13
十进制13转二进制为 1101
8进制转换
运算时的类型转换
存储多个相同类型数据的存储模型,数组在初始化时会为储存空间添加默认值
静态初始化:int[] arr = new int[]{ 1,2,3}; 简化格式:int[] arr = { 1,2,3 };
动态初始化:int[] arr = new int[];
数组操作的两个常见问题:
栈内存:存储局部变量 例如定义在方法中的变量
堆内存:存储new出来的内容(实体, 对象)
栈是临时存储空间,也是方法和变量调用时的临时空间
当new一个对象/数组时,堆里就会创建一个新的地址;
int[] arr = new int[3]
// 栈内存里的arr[0]对应堆内存的new int的堆内存地址“001”
int[] arr2 = arr;
arr2[0] = 100;
// 这里arr[0]也会变为100
在类中使用private String name被privave定义的name属性,只能通过类内部定义的方法获取和使用,不能被外部访问;
在类中的方法里存在,this等于当前调用他的对象;
无参构造方法 public 类名(){}
有参构造方法 public 类名(int 100){}
无论是否有参最好都在类里声明无参构造方法
String类在java.lang包下,Java程序中所有的双引号字符串,都是String类的对象
JVM只会创建一个String对象,并在字符串池中维护
new出来的string都有自己的堆内存空间,直接赋值的string值存在常量池里,直接调用并共用一个常量池,没有新堆内存
字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])
↑JDK8以前是字符数组,JDK9以后是字节数组
String s = "ni";
s += "hao"
// 在常量池里会创建 ni hao nihao 三个内存地址
StringBuilder s = new StringBuilder;
// 此时s的内容可以随意改变
字符串每次拼接都会构建一个新的String对象,耗时耗内存,使用StringBuilder
解决字符串拼接问题;
八大基本数据类型↓
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生变化;
ArrayList array = new ArrayList<>()
子类被称为派生类
,父类称为基类,超类
// public class 子类名 extends 父类名 {}
public class Zi extends Fu {}
父类成员属性
的方式,super.成员变量->用来访问父类的成员变量;先完成父类
的数据初始化,每一个子类构造方法的第一条语句默认都是:super();无论是否有参最好都在类里声明无参构造方法
继承
;方法不能被重写
;变量不能再次被赋值
基本类型的变量变常量,引用类型的变量地址值不会变地址内容可以改变;多态的前提
(1)有继承或者实现关系
(2)有方法重写
(3)有父类/接口引用指向子类对象
多态的分类
抽象类和抽象方法必须使用abstract
关键字修饰
public abstract class 类名 {}
public abstract void eat();
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
构造方法
但是不能实例化,用于子类访问父类数据的初始化interface
修饰public abstract 接口名 {}
implements
表示public class 类名 implements 接口名 {}
(1)成员变量
只能是常量:public static final
(2)构造方法
接口没有构造方法,因为接口主要是对行为进行抽象;一个类没有父类,默认继承Object类
(3)成员方法
只能是抽象方法:public abstract 接口名 {}
new 类名 () {
重写方法
}