java 温习:类的治理及常用工具类
包
- 写在程序文件的第一行
- 一个 Java 源文件中只能申明一个包,
且申明语句只能作为源文件的第一条指令 - 导入类能导入非 public 类,然而不能用因为在其余包缺省的权限用不了
package Testp;
import Testpackage.*;
public class C {public static void main(String[] args) {A a=new A();
B b=new B();}
}//Testpackage.* 只能导入
- 此时不将 AB 两类放在同一个.class 文件不然有一个肯定是非 public 类,C 等下用不了这个非 public
- 留神
.* 是对于包来说的,当把 AB 分成两个 class 文件时就能够两个全副导入
了 - Java 编译器为所有程序主动导入包 java.lang
- 无名包不能导入.* 无名包中的类无奈被导入
- 动态导入的时候如果是 import aa.; 能够导入类的所有成员包含动态,如果是 import static aa.A.; 是导入 A 中的所有动态成员,非动态的就会报错,所以能够将 A 的所有成员改成动态的
- 一个 class 文件(.java)只能有一个 pubic 类如果一个包外面有多个 public 类即创立多个 class 文件
包装器类
- Byte、Short、Integer、Long、Float、Double、
Character、Boolean -
包装器类的 2 种构造函数
包装器类名(根本类型值)
-
包装器类名(根本类型值的字符串)
- Character 类构造函数只能是字符参数;
- Boolean 包装器对 ture/false 不辨别大小写
- 例子:
float f=(new Double(100.2)).floatValue();
int i=(new Double("100.2").intValue());//XXXvalue(): 包装器类 - 根本类型
float f=Float.parseFloat("11.3f");
int d=Integer.parseInt("25");
// 字符串 - 根本类型
Double d=Double.valueof("25.4");//Character 包装器类没有这个办法
// 字符串 - 包装器
// 根本类型、包装器类型 - 字符串
String s1=Double.toString(3.14);//toString 有静态方法也有实例办法
String s2=new Double(3.14).toString()
- 留神传参数时候,不如果参数是包装器类不能间接传一个根本类型此时不反对主动装箱拆箱
-
要用构造函数主动装箱
- Double a=1.2;// Double a=new Double(1.2); 主动装箱
- double b= a ; // 主动拆箱
枚举
- enum 枚举类型名字{枚举常量列表}
public class Ch_5_5_2 {enum Season { 秋季, 冬季, 秋季, 夏季;}
public static void main (String[] args) {Season [] s= Season.values();
for (int i=0; i<s.length; i++)
{switch(s[i]) {
case 秋季: //case Season. 秋季 编译错
System.out.println(“春困”); break;
case 冬季:
System.out.println(“夏打盹”); break;
case 秋季:
System.out.println(“秋乏”); break;
case 夏季:
System.out.println(“睡不够的冬三月”); break; }
}
}
}
数组的高级利用
- 要导入
import java.util.Arrays;
- 排序办法和 binarySearch 前提是数组不能为降序能够是无序或者升序
int i=Arrays.binarySearch(a1,3);
返回 3 这个元素呈现第一次的下标Arrays.fill(c,4);
将数组 c 填充斥 4
字符串的高级利用
-
StringBuilder: 线程不同步不平安但执行效率更高
-
StringBuffer
正则表达式
- 正则匹配步骤:
Pattern p=Pattern.compile(reg1);//reg1 为模式串正则表达式
Matcher m=p.matcher(str);//str 是待匹配串
m.group();m.find;m.start()
String[] split(String regex)
regex 是分隔串,也能够是正则表达式
作用:宰割字符串,生成数组
String s="aa,bb,cc,dd";
String[] sa=s.split(","); // 以 , 作为 s 的分隔串,提取字符串
for(String s1:sa)
System.out.println(s1);
String replaceFirst(String regex, String rp)
作用:用 rp 替换 regex 的首次呈现String replaceAll(String regex, String rp)
作用:用 rp 替换 regex
随机数类
// 要导入 java.util.Random
Random r=new Random();
int x,i;
for(i=1;i<=10;i++){x=r.nextInt(10)+1;// 默认从 0 开始,要获取从 1 -10 的就要 +1
System.out.println(x);
}
面向对象程序设计
对象和对象援用的内存治理
-
栈(主动管理机制)
- 栈空间中的数据被零碎主动治理即在函数调用时主动创立数据空间,在函数运行完结时主动开释数据空间
- 函数中定义的所有变量无论是根本类型还是援用类型均存储于栈空间
-
堆(手动管理机制)
- 实现按需分配或开释
- 所有对象均存储于堆空间
-
构造函数
- 与类同名,不必定义返回值类型,也没有 return 语句,即便无返回值,也不能用 void 申明
- 应用 new 实例化对象时,零碎依据给出的
参数表调用对应的构造函数。这就是构造函数重载
-
结构代码块
- 作用:对所有对象进行对立初始化
- 特点:
对象一建设就执行并且优于构造函数执行
class Person {
private String name;
private int age;
{age=15;}// 结构代码块
Person() {System.out.println("A:name="+name+",age="+age);}
Person(String n) {
name=n;
System.out.println("B:name="+name+",age="+age);
}
}
对象的销毁
-
常量 final
- 常量援用不可更改即指向某一对象不可更改,然而指向对象的内容能够批改
- 留神如果是 string 或者数组等援用肯定在堆外面还要指向一个最终的数据
- a= b 是 a 指向 b 指向的对象
- == 判断地址是否雷同
- a.equals(b)判断内容是否雷同
-
对象数组
- new String[10] 不是创立 String 类对象(而是数组 对象),因而未调用 String 的构造函数。
- sa[0] 是 String 援用,不是 String 对象,sa[0]指向的那个才是 string 对象
继承
- 对于超类的公有成员领有但不能应用
- 结构对象时,会主动调用该类与超类的结构函
数,调用秩序与派生秩序雷同 - 若超类有非 private 的
无参构造函数
,子类则主动调用
;若超类是有参构造函数
,则子类构造函数中必须显式调用超类的构造函数
,否则编译错
单例模式
class Student{
String name;
int age;
private Student(){}
public static Student creat(){// 肯定是 static 这样能够通过类名调用
Student a=new Student();// 在办法中 new
return a;
}
}
Student st=Student.creat();
System.out.println(st.age);
多态
- 意义:一名多义
-
重载(编译时决定动态绑定)同一个对象同一个办法的参数不同
- 狗 1. 嗅(客人气息 q); 狗 1. 嗅(骨头气息 q); ……
- 留神
重载传参
时,如果是根本类型数据能够强制转换大的能够转换成小的,然而小的不能转换成大的
-
重写(运行时决定 动静绑定)不同对象同一个行为的本质不同
- 狗 d=new 藏獒 ()/ new 哈士奇(); d. 咬();// 重写咬这个办法不同的 new 的对象调用这个办法是不同的,尽管这个办法是 extents 父类的
保障同名同参同返回类型权限不能放大
- 如果要禁止一个类派生子类那么将类设置
为 final
- 禁止子类重写某个操作能够将操作设置为
final 或者 static
- 不心愿被重写的办法能够:
final/static/private
// 类没有 private 润饰
- 狗 d=new 藏獒 ()/ new 哈士奇(); d. 咬();// 重写咬这个办法不同的 new 的对象调用这个办法是不同的,尽管这个办法是 extents 父类的
抽象类和接口
-
抽象类:在父子之间建设契约
- abstract 不能润饰构造函数
- abstract 不能和 static final 同时应用
- 子类必须要重写抽象类
- 接口:在任意类之间建设契约
最初
欢送关注公众号:前程有光,支付一线大厂 Java 面试题总结 + 各知识点学习思维导 + 一份 300 页 pdf 文档的 Java 外围知识点总结!