sách gpt4 ăn đã đi

Giới thiệu võ thuật thượng thừa của java--suy ngẫm

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 36 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết blog CFSDN Giới thiệu Võ thuật nâng cao Java - Suy ngẫm này được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.

Trước tiên hãy xem một số phép thuật

public class Test { Private static void ChangeStrValue(String str, char[] value) { // Chỉ cần thực thi mã ma thuật để đạt được các hiệu ứng sau // Mã ma thuật sẽ được tiết lộ sau} public static void main(String[] args) { ChangeStrValue("abc", new char[]{"d","e","f"}); Chuỗi abc = "abc"; System.out.println(abc); System.out.println("abc".equals(abc));

Giới thiệu võ thuật thượng thừa của java--suy ngẫm

Đây là lần đầu tiên ông chủ thứ hai nhìn thấy kết quả thi hành án và cảm thấy rất thú vị. Tại sao nó lại trở thành "def" trong khi lẽ ra nó phải là "abc"?

  。

Cơ chế phản ánh là gì?

Cơ chế phản chiếu của Java có nghĩa là ở trạng thái chạy của chương trình, bạn có thể xây dựng một đối tượng của bất kỳ lớp nào, bạn có thể hiểu lớp mà đối tượng đó thuộc về, bạn có thể hiểu các biến thành viên và phương thức của bất kỳ lớp nào và bạn có thể gọi bất kỳ lớp nào. đối tượng. Thuộc tính và phương thức. Chức năng lấy thông tin chương trình một cách linh hoạt và gọi động các đối tượng này được gọi là cơ chế phản chiếu của ngôn ngữ Java. Sự phản ánh được coi là chìa khóa cho các ngôn ngữ động.

Trên đây là lời giải thích từ bách khoa toàn thư. Có thể hơi trừu tượng nhưng hãy xem nhị sư phụ giải thích cho bạn nhé.

  。

Xây dựng một đối tượng của bất kỳ lớp nào

Trong trường hợp thông thường, nếu chúng ta muốn tạo một đối tượng của một lớp, chúng ta nên sử dụng từ khóa new. Nhưng trong framework như spring, chúng ta chỉ cần cấu hình tên lớp để lấy một thể hiện của lớp. Anh ấy đã làm điều đó như thế nào?

import java.util.List;public class Test { /** * Ví dụ về lớp kiểm tra * @author Lớp kiểm tra lớp học trực tuyến https://le-yi.blog.csdn.net/ * @param className * @param  * @return * @throws InstantiationException * @throws IllegalAccessException * @throws ClassNotFoundException */ public static  T getInstance(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException { Class clazz = (Class) Class.forName(className); return clazz.newInstance(); } public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { List list = getInstance("java.util.ArrayList"); list.add("abc"); list.add("def"); cho (Chuỗi v : danh sách) { System.out.println(v); } }}

Tên lớp có thể được lấy từ tệp cấu hình trong khi chương trình đang chạy hoặc thậm chí được lấy từ mạng và sau đó một phiên bản của lớp có thể được tạo động.

  。

Hiểu lớp mà bất kỳ đối tượng nào thuộc về

import java.util.ArrayList;public class Test { /** *In tên lớp của đối tượng* @author 二头家的白hathttps://le-yi.blog.csdn.net/ * @param o */ public static void printClass(Object o) { System.out.printf(o.getClass().getName()); } public static void main(String[] args) { printClass(new ArrayList<>());

Giới thiệu võ thuật thượng thừa của java--suy ngẫm

  。

Hiểu các biến và phương thức thành viên của bất kỳ lớp nào

Khi chúng ta thường muốn sử dụng một lớp, trước tiên chúng ta phải biết nó có những phương thức và thuộc tính nào, hiểu nó trước rồi mới sử dụng nó. Nhưng tại sao một framework như spring lại có thể tự động đưa nó vào cho chúng ta? Làm sao anh ta biết được những thuộc tính nào trong một trong những đối tượng của chúng ta?

import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test { /** *In thuộc tính lớp* @author Chiếc mũ trắng của bậc thầy thứ hai https://le-yi.blog.csdn .net / * @param clazz */ public static void printFields(Class clazz) { System.out.println(clazz.getName() + "Chứa các thuộc tính sau:"); clazz.getDeclaredFields()) { System.out.println(f); } } /** * Phương thức in lớp * @author Mũ trắng của nhà lãnh đạo thứ hai https://le-yi.blog.csdn.net/ * @param clazz */ public static void printMethods(Class clazz) { System.out.println(clazz.getName() + "Chứa các phương thức sau:"); clazz.getDeclaredMethods()) { System.out.println(m); } } public static void main(String[] args) { printFields(MyClass.class); printMethods(MyClass.class); tên; chuỗi công khai getName() { tên trả về } public void setName(Tên chuỗi) { this.name = name }}

Giới thiệu võ thuật thượng thừa của java--suy ngẫm

  。

Gọi các thuộc tính và phương thức của bất kỳ đối tượng nào

Trong các framework như spring, ngay cả khi một thuộc tính là riêng tư và không có phương thức cố định thì nó vẫn có thể được chèn vào.

import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test { /** * Gọi phương thức của một đối tượng* @author Chiếc mũ trắng của bậc thầy thứ hai https :/ /le-yi.blog.csdn.net/ * @param o * @param MethodName * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalAccessException */ public static void callMethod(Object o, String MethodName) ném NoSuchMethodException, InvocationTargetException, IllegalAccessException { Method m = o.getClass().getDeclaredMethod(methodName); m.setAccessible(true); o); } /** * Sửa đổi thuộc tính của đối tượng* @author Chiếc mũ trắng của ông chủ thứ hai https://le-yi.blog.csdn.net/ * @param o * @param fieldName * @param value * @throws IllegalAccessException */ public static void ChangeFieldValue(Object o, String fieldName, Giá trị đối tượng) ném NoSuchFieldException, IllegalAccessException { Field f = o.getClass().getDeclaredField(fieldName); f.setAccessible(true); f.set(o, value); } public static void main(String[] args) ném InvocationTargetException, NoSuchMethodException, IllegalAccessException, NoSuchFieldException { MyClass o = new MyClass(); // Sửa đổi bất kỳ thuộc tính nào, Ngay cả thay đổi riêng tưFieldValue(o, "name", "Mũ trắng của người chỉ huy thứ hai"); Gọi bất kỳ phương thức nào, thậm chí cả private callMethod(o, "printName"); }}class MyClass { // Thuộc tính riêng tư, chỉ có thể gọi phương thức set để sửa đổi tên Chuỗi riêng tư void printName() { // Chỉ phương thức riêng tư; this Phiên bản riêng của lớp có thể gọi System.out.println("Tên tôi là " + name); } public String getName() { return name; } public void setName(String name) { this.name = name;

Giới thiệu võ thuật thượng thừa của java--suy ngẫm

  。

Phép thuật được tiết lộ

Đã đến lúc tiết lộ bộ mặt thật của ma thuật, và đúng vậy, nó cũng sử dụng sự phản chiếu.

import java.lang.reflect.Field;public class Test { /** * Sửa đổi giá trị bên trong chuỗi * @author Mũ trắng của nhà lãnh đạo thứ hai https://le-yi.blog.csdn.net/ * @param str * @ param value */ riêng tĩnh void thay đổiStrValue(String str, char[] value) { try { Field f = str.getClass().getDeclaredField("value"); f.set(str, value); } Catch (Ngoại lệ e) { e.printStackTrace(); } } public static void main(String[] args) { ChangeStrValue("abc", new char[]{"d", "e","f"}); // Chuỗi "abc" ở đây và tham số "abc" dùng để gọi ChangeStrValue ở trên sẽ trỏ đến cùng một chuỗi bộ nhớ abc = "abc"; System.out.println("abc"); System.out.println(abc); System.out.println("abc".equals(abc));

Để hiểu đoạn mã này, ngoài cơ chế phản chiếu, bạn còn cần hiểu cách xử lý chuỗi của Java. "Nhóm hằng số chuỗi" nằm ngoài phạm vi của bài viết này và là một chủ đề khác, vì vậy tôi sẽ không đi sâu vào chi tiết hơn trong bài viết này.

Nội dung chuỗi gốc là "abc". Chúng tôi không thể sửa đổi nội dung này trong các trường hợp thông thường vì Chuỗi là một lớp không thể thay đổi. Nhưng việc thực hành quán chiếu có thể phá vỡ mọi điều cấm kỵ.

  。

Tóm tắt

Các chương trình thông thường có thể không cần viết mã phản chiếu. Nhưng trong một khuôn khổ như mùa xuân, không có sự phản ánh, tôi thực sự không thể tìm ra cách triển khai nó. Ngay cả khi chúng ta không bao giờ cần sử dụng sự phản ánh, việc hiểu được cơ chế này vẫn mang lại lợi ích to lớn cho chúng ta.

Bài viết này kết thúc tại đây, tôi hy vọng nó có thể hữu ích cho bạn và tôi hy vọng bạn có thể chú ý hơn đến nội dung của tôi! .

Liên kết gốc: https://blog.csdn.net/leyi520/article/details/118676211.

Cuối cùng, bài viết giới thiệu - phản ánh võ thuật xuất sắc của Java này kết thúc tại đây. Nếu bạn muốn biết thêm về giới thiệu - phản ánh võ thuật xuất sắc của Java, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. tương lai blog của tôi! .

36 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress