單元測試JUnit 單元測試的目的是針對方法進行測試, **JUnit的兩個要點:**①必須是公開的,無參數,無返回值的方法 ②測試方法必須使用@Test註解標記 public class JUnitTest { @Test public void Testusername() { way way ...
單元測試JUnit
單元測試的目的是針對方法進行測試,
JUnit的兩個要點:①必須是公開的,無參數,無返回值的方法 ②測試方法必須使用@Test註解標記
public class JUnitTest {
@Test
public void Testusername() {
way way = new way();
String rs = way.username("123");
//JUnit提供的斷言
Assertions.assertEquals("登陸成功",rs);
}
}
class way {
public String username(String un) {
if(un.equals("123")) {
return "登陸成功";
}else
return "登陸失敗";
}
}
反射
反射概述
反射是在運行時獲取類的位元組碼文件對象,然後可以解析類中的全部成分。
反射的關鍵:得到編譯以後的class文件對象。
獲取Class對象的方法 | 說明 |
---|---|
Class c1 = Class.forName(包名+類名) | Class類中的一個靜態方法 |
Class c2 = 類名.class | 直接用類名獲得,最方便 |
Class c3 = 對象.getClass() | 實例化後用對象獲得 |
利用反射獲取構造器對象
**反射的構造器可以用於創建對象 **
public class Reflect {
public static void main(String[] args) throws Exception {
//1.獲取Class對象
Class c1 = Student.class;
//2.獲取構造器對象
Constructor student = c1.getDeclaredConstructor();
//3.利用構造器對象來實例化對象
Student stu = (Student) student.newInstance();
//演示私有構造器如何獲取
Class c2 = Student.class;
//1.有參構造器聲明類型
Constructor student2 = c2.getDeclaredConstructor(String.class,int.class);
//2.破壞構造器私有性
student2.setAccessible(true);
student2.newInstance("jack",18);
}
}
利用反射獲取成員變數對象
public class Reflect {
public static void main(String[] args) throws Exception {
//1.獲取Class對象
Class c1 = Student.class;
//2.獲取Field對象
Field field = c1.getDeclaredField("age");
field.setAccessible(true);
//3.給成員變數賦值
Student student = new Student();
field.set(student,18);
//4.獲取成員變數
int result = (int) field.get(student);
System.out.println(result);
}
利用反射獲取方法
public class Reflect {
public static void main(String[] args) throws Exception {
//1.獲取Class對象
Class c1 = Student.class;
//2.獲取Method對象
Method name = c1.getDeclaredMethod("setName", String.class);
//3.Method.invoke(對象)來調用方法
Student student = new Student();
name.invoke(student,"Jack");
}
}
反射作用:繞過編譯為集合添加數據
說明:①編譯成Class文件進入運行階段後,泛型會自動擦除
②反射是作用在運行時的技術,此時已經不存在泛型了
public class Reflect {
public static void main(String[] args) throws Exception {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
//無法加入String類型的變數
//list.add("Jack");
//使用放射來強行加入String(運行時)
Class d = ArrayList.class;
Method add = d.getDeclaredMethod("add", Object.class);
add.invoke(list,"Jack");
for (Object integer : list) {
System.out.println(integer);
}
}
}
//運行結果:1 2 Jack
反射作用:通用框架的底層原理
說明:①可以在運行時得到一個類的全部成分
②做Java高級框架
③可以針對不同的對象,獲取他們的信息
註解
對Java中類、方法、成員變數做標記,然後進行特殊處理
自定義註解
元註解
註解註解的註解(放在註解定義上方)
常見的元註解有兩個:
註解 | 說明 |
---|---|
@Target | 約束自定義註解只能在哪些地方使用 |
@Retention | 申明註解的生命周期 |
註解解析
判斷是否存在註解,存在註解就解析出內容