二维数组
- 元素是一维数组的数组
- 格式
// T为数据类型 T[][] a = new T[m][n]; T[][] a = new T[m][]; T[][] a = new T[m][n]{{...}, {...}, {...}}; T[][] a = {{...}, {...}, {...}}
- 案例
- 二维数组的遍历
- 二维数组的求和
- 杨辉三角形
Java中的参数传递问题
java中只有值传递
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变影响实际参数
代码Student s = new Student();
做了哪些事?
- 把Student.class文件加载到内存
- 在栈内存为s开辟控件
- 在堆内存为学生对象申请空间
- 给学生的成员变量默认初始化, null,0
- 对象构造完毕,把地址赋值给s变量
static
关键字
-
静态的意思:可以用来修饰成员变量和方法
-
静态的特点
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享
- 可以通过类名调用,也可以通过对象名调用,建议通过类名调用。
-
静态的注意事项
- 静态方法中没有this对象
- 静态只能访问静态
-
静态变量和成员变量的区别
- 所属不同
- 静态变量:属于类,类变量
- 成员变量:属于对象,对象变量,实例变量
- 内存位置不同
- 静态变量:方法区的静态区
- 成员变量:堆内存
- 生命周期不同
- 静态变量:随着类的加载而加载,随着类的消失而消失
- 成员变量:随着对象的创建而存在,随着对象的消失而消失
- 调用不同
- 静态变量:可以通过对象名调用,也可以通过类名调用
- 成员变量:只能通过对象名调用
- 所属不同
-
main方法是静态的
- public:曲线最大
- static 不用创建对象调用
- void:返回值给JVM没有意义
如何制作帮助文档?
- 写一个类
- 加入文档注释
- 通过javadoc工具生成:
javadoc -d 目录 -author -version ArrayTool.java
Math
类
- 没有构造方法,所有成员都是静态的
- 产生随机数
public static double random(): // [0.0, 1.0)
final
关键字
- 是最终的意思,可以修饰类、方法、变量
- 特点
- 它修饰的类, 不能被继承
- 它修饰的方法,不能被重写
- 它修饰的变量,是一个常量
- 注意:
- 局部变量:
- 基本类型:值不能发生改变
- 引用类型:地址值不能发生改变,但是对象的内容是可以改变的。
- 初始化时机
- 只能初始化一次
- 常见的给值
- 定义的时候(推荐)
- 构造方法中
- 局部变量:
抽象类
- 抽象类的特点:
- 抽象类和抽象方法必须用关键字
abstract
修饰 - 抽象类中不一定有抽象方法,但是有抽象方法的一定是抽象类
- 抽象类不能实例化
- 抽象类的子类
- 是一个抽象类
- 是一个具体类,这个类必须重写抽象类中的所有抽象方法
- 抽象类和抽象方法必须用关键字
- 抽象类成员的特点:
- 成员变量:有变量、有常量
- 构造方法:有
- 成员方法:有抽象、有非抽象
- 注意
- 抽象类有构造方法,不能实例化,那么构造方法有什么用?
用于子类访问父类数据的初始化 - 一个类如果没有抽象方法,却定义为了抽象类,有什么用?
为了不创建对象 - abstract不能和哪些关键字并存
final:冲突
private:冲突
static:无意义
- 抽象类有构造方法,不能实例化,那么构造方法有什么用?
接口
- 接口的实现类
抽象类
具体类:这个类必须重写接口中的所有抽象方法 - 成员特点
成员变量:只能是常量,默认修饰符public static final
构造方法:没有构造方法
成员方法:只能是抽象的,默认修饰符public abstract
内部类
- 把类定义在另一个类的内部,该类就叫做内部类
- 内部类的访问规则
可以直接访问外部类的成员,包括私有
外部类想要访问内部类成员,必须创建对象 - 内部类的分类
- 成员内部类
- 局部内部类
- 成员内部类
private
为了数据的安全性static
为了访问的方便性- 成员内部类不是静态的
外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
- 成员内部类是静态的
外部类名。内部类名 对象名 = new 外部类名.内部类名();
- 局部内部类
- 局部内部类访问局部变量必须加final修饰,因为局变量使用完毕消失,而堆内存中的数据并不会立即消失,所以,堆内存还是用该变量,而该变量已经没有了。为了让该值还存在,就加final修饰,通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。
- 匿名内部类
- 是局部内部类的简化形式
- 前提:存在一个类或接口
- 格式:
new 类名或者接口名() { 重写方法; }
- 本质:其实是继承该类或者实现接口的子类匿名对象
Object
类
- Object类是类层次结构的根类,所有的类都直接或者间接继承自Object类
- Object类的构造方法有一个,并且是无参构造
- 方法
toString()
:返回对象的字符串表示,一般子类会重写该方法equals()
:比较两个对象是否相同,默认情况下,比较的是地址值是否相同。hashCode()
:返回对象的哈希值getClass()
:返回对象的字节码文件对象finalize()
:用于垃圾回收,在不确定的时间clone()
:可实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。
- 注意
- 直接输出一个对象名称,其实默认调用了该对象的toString()方法。
Scanner
类
- 构造方法
InputStream is = System.in; Scanner(InputStream is);
- 常用格式
Scanner sc = new Scanner(System.in);
- 常用的方法格式:
hasNextXxx()
:判断是否是某种类型nextXxx()
:返回某种类型的元素
String
类
- 构造方法
public String();
public String(byte[] bytes);
public String(byte[] bytes, int offset, int length);
public String(char[] value);
public String(char[] value, int offset, int count);
public String(String original);
- 下面的这个虽然不是构造方法,但是结果也是一个字符串对象
String s = "hello";
- 字符串的特点
- 字符串一旦被赋值,就不能改变(这里指的是字符串的内容不能改变,而不是引用不能改变)
- 字面值作为字符串对象和通过构造方法创建对象的不同
- 字符串的功能
- 判断功能
boolean equals(Object obj);
boolean equalsIgnoreCase(String str);
boolean contains(String str);
boolean startsWith(String str);
boolean endsWith(String str);
boolean isEmpty();
- 获取功能
int length();
char charAt(int index);
int indexOf(int ch);
int indexOf(String str);
int indexOf(int ch, int fromIndex);
int indexOf(String str, int fromIndex);
String subString(int start);
String subString(int start, int end);
- 转换功能
byte[] getBytes();
char[] toCharArray();
static String valueOf(char[] chs);
static String valueOf(int i);
String toLowerCase();
String toUpperCase();
String concat(String str);
- 替换功能
String replace(char old, char new);
String replace(String old, String new);
- 去空格功能
String trim();
- 按字典序比较功能
int compareTo(String str);
int compareToIgnoreCase(String str);
- 判断功能
StringBuffer
类
- 用字符串拼接比较耗时并且耗内存,而这种操作又是比较常见的,为了解决这个问题,Java就提供了一个字符串缓冲类
StringBuffer
。 - 构造方法
StringBuffer();
StringBuffer(int size);
StringBuffer(String str);
- 常见功能
- 添加功能
StringBuffe append(char c);
StringBuffer insert(int offset, String str);
- 删除功能
String deleteCharAt(int index);
String delete(int start, int end);
- 替换功能
StringBuffer replace(int start, int end, String s);
void setCharAt(int index, char ch);
- 翻转功能
StringBuffer reverse();
- 添加功能
- 注意
- StringBuffer:同步的,数据安全,效率低一些
- StringBuilder:不同步的,数据不安全,效率高
Arrays
工具类
static <T> List<T> asList(T...a)
:转换成Liststatic int binarySearch(T[], T key)
:二分查找static <T> void sort(T[] a, Comparator<? super T> c)
:排序static fill(Object[] a, Object val)
:填充
String
和int
的相互转化
int num = Integer.parseInt("100");
String num = String.valueOf(100);