java中的反射三(反射機制深入---對陣列的操作)
反射機制對陣列的操作1
取得陣列的Class物件以及相關屬性和方法
public class ClassArrayDemo{ public static void main(String args[]) throws Exception{ int temp[] = {1,2,3} ;// 宣告一整型陣列 Class<?> c = temp.getClass().getComponentType() ; // 取得陣列的Class物件 System.out.println("型別:" + c.getName()) ; // 取得陣列型別名稱 System.out.println("長度:" + Array.getLength(temp)) ; System.out.println("第一個內容:" + Array.get(temp,0)) ; Array.set(temp,0,6) ; System.out.println("第一個內容:" + Array.get(temp,0)) ; } };
對陣列的開闢和拷貝
public class ChangeArrayDemo{ public static void main(String args[]) throws Exception{ int temp[] = {1,2,3} ;// 宣告一整型陣列 int newTemp[] = (int []) arrayInc(temp,5) ; // 重新開闢空間5 print(newTemp) ; System.out.println("\n-------------------------") ; String t[] = {"lxh","mldn","mldnjava"} ; String nt[] = (String [])arrayInc(t,8) ; print(nt) ; } public static Object arrayInc(Object obj,int len){ Class<?> c = obj.getClass() ; Class<?> arr = c.getComponentType() ; // 得到陣列的 Object newO = Array.newInstance(arr,len) ; // 開闢新的大小 int co = Array.getLength(obj) ; System.arraycopy(obj,0,newO,0,co) ; // 拷貝內容 return newO ; } public static void print(Object obj){ // 陣列輸出 Class<?> c = obj.getClass() ; if(!c.isArray()){ // 判斷是否是陣列 return; } Class<?> arr = c.getComponentType() ; System.out.println(arr.getName()+"陣列的長度是:" + Array.getLength(obj)) ; // 輸出陣列資訊 for(int i=0;i<Array.getLength(obj);i++){ System.out.print(Array.get(obj,i) + "、") ; // 通過Array輸出 } } };
反射機制對陣列的操作2
public class RefletTest { /** * 陣列的的反射 */ public static void main(String[] args) { String[] obj=new String[]{"a","b","c"}; printArrays(obj); printArrays("xyz"); } private static void printArrays(Object obj) { Class cazz=obj.getClass(); if(cazz.isArray()) { int len=Array.getLength(obj); for(int i=0;i<len;i++) { System.out.println(Array.get(obj,i)); } } else { System.out.println(obj); } } }
用反射方式執行某個類中的main方法
public class ReflectTest {
public static void main(String[] args) throws Exception {
String startingClassName=args[0];
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class);
//這一點特別注意:這裡使用new Object[]陣列將new String[] 進行打包成一個物件
mainMethod.invoke(null,new Object[]{new String[]{"111","222","333"}});
}
}
class TestArguments {
public static void main(String[] args)
{
for(String s:args)
System.out.println(s);
}
}
陣列型別與Object型別之間的關係
public class ArrayReflectTest {
/**
* 陣列的反射
* 1--具有相同維數和元素型別的屬於屬於同一個型別。及具有相同的Class例項物件。
* 2--代表陣列的Class例項物件的getSuperClass()方法返回的父類為Object類對應的Class。
* 3--基本型別的一維陣列可以被當作Object型別使用,不能當做Object[]型別使用;
* 非基本型別的一維陣列,即可以當做Object[]型別使用,又可以當做Object[]型別使用。
*
*/
public static void main(String[] args) {
int[] a1=new int[]{1,2,3};
int[] a2=new int[4];
int[][] a3=new int[2][3];
String[] a4=new String[]{"a","b","c"};
System.out.println(a1.getClass()==a2.getClass()); //返回true因為符合(具有相同維數和元素型別的屬於屬於同一個型別。及具有相同的Class例項物件。);
System.out.println(a1.getClass()==a3.getClass());//返回false,因為a1陣列的型別是基本資料型別的陣列,其型別屬於Object型別,而a3是引用型別的陣列,其型別屬於Object[]型別。即型別不同和維數也不同
System.out.println(a1.getClass()==a4.getClass());//返回false因為a1陣列的型別是基本資料型別的陣列,而a4是引用型別的陣列。即型別不同
Object obj1=a1;
Object obj2=a2;
Object[] obj3=a3;
Object[] obj4=a4;
System.out.println(obj1+"\n"+obj2+"\n"+obj3+"\n"+obj4+"\n");
System.out.println(Arrays.asList(obj1));//基本型別的一維陣列可以被當作Object型別使用,不能當做Object[]型別使用
System.out.println(Arrays.asList(obj3));//非基本型別的一維陣列,即可以當做Object[]型別使用,又可以當做Object[]型別使用。
System.out.println(Arrays.asList(obj4));//非基本型別的一維陣列,即可以當做Object[]型別使用,又可以當做Object[]型別使用。
}
}
相關推薦
java中的反射三(反射機制深入---對陣列的操作)
反射機制對陣列的操作1 取得陣列的Class物件以及相關屬性和方法 public class ClassArrayDemo{ public static void main(String args[]) throws Exception{ int temp[] = {
【Java學習筆記】66:認識Java中的Reflection(反射)機制,獲取類的屬性和方法
反射部分一直欠著,現在學框架和Servlet必須要學一下了。最近學習Struts2框架和Servlet時候,很多地方直接給出類名就可以去使用了,如在web.xml中配置Filter時: <filter> <filter-name&
深入理解Java中的回撥機制(最通俗易懂的回撥機制的部落格)
1. 什麼是回撥? 在我看來,回撥其實是一個相當具有迷惑性的名字,因為它很容易讓人糾結於回撥這個詞語本身的含義,從而忽略了回撥這種機制的本質。要理解Java中的回撥概念,最好的方式不是通過例項,而是從回撥概念的起源說起。 最開始接觸回撥時在C語言中函式指
夯實Java基礎系列11:深入理解Java中的回撥機制
目錄 模組間的呼叫 多執行緒中的“回撥” Java回撥機制實戰 例項一 : 同步呼叫 例項二:由淺入深 例項三:Tom做題 參考文章
java中存在垃圾回收機制,但是還會有內存泄漏的問題,原因是
java 自己 data .so 這樣的 即使 垃圾 ref stack 答案是肯定的,但不能拿這一句回答面試官的問題。分析:JAVA是支持垃圾回收機制的,在這樣的一個背景下,內存泄露又被稱為“無意識的對象保持”。如果一個對象引用被無意識地保留下來,那麽垃圾回收器不僅不會處
在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作
cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作
Java中的三目運算符
java 簡單 tro div 組成 分支 p s center 結構 Java中的三目運算符 Java中的三目運算符: 有些選擇分支結構,可以使用簡單的條件運算符來代替. 如: if(a<b) min=a; else min=b; //可以用下面
你真的會用java中的三目運算符嗎
tmp nbu mar bce dft class eth 黃金 fzu 我也慨嘆不已,想我當初15級裝備王者黃金弓時攻擊力才達到180,現在要是到了15級再裝備的話,攻擊力就遠遠不是那麽低了! 一陣動亂之後,大約十幾個水晶螃蟹的仇恨立刻全部被吸引了過去,我立刻眼疾手快的換
Java - Java 中的三種 ClassLoader
虛擬 .class nbsp 無法 path ssp ots c++編譯 pcl 1、虛擬機類加載器(稱為“bootstrap class loader”),它本身沒有父類加載器,它負責加載虛擬機的內置類,由於它是用C、C++寫的,所以Java無法拿到其class文件,返回
java中的三目運算
ava 基礎 system ring args 復習 value println 代碼 直接上代碼!復習基礎! public static void main(String args[]){ int a , b; a = 10;
Java中的異常處理機制
條件 order 什麽是 浪費 sun color 越界 details 區域 基本框架如下Java中的異常處理機制只要實現自Throwable接口,繼承關系如下: 如上圖可以看出這個機制的處理對象主要分為兩種:主要區別error 表示恢復不是不可能但很困難的情況下的
java中的引用類型的對象存放在哪裏
void 上下 實例變量 java body 在哪裏 運行時 () 數據 根據上下文來確定。比如void func(){ Object obj = new Object();//這個obj在函數的棧裏。}class Test{ private Object obj
Java中的三目運算符可能出現的問題
-m add 運算符 inline test orm JD borde lean 你真的了解Java中的三目運算符嗎? 原創 2018-04-27 刨根問底的 Hollis Hollis Hollis 微信號 hollischuang 功能介紹 一個對Coding有
Java中的類繼承機制、接口
string類型 賦值 In void ati ble public 3.1 eache 1)聲明一個Person類,有name(String類型)、age(int類型)、sex(char類型)屬性,通過構造方法進行賦值。一個show方法,返回String類型,內容如下:
詳解 Java 中的三種代理模式
繼承 jvm 保存 3.2 指令集 throwable eth args 代理類 代理模式 代理(Proxy)是一種設計模式,提供了對目標對象另外的訪問方式;即通過代理對象訪問目標對象.這樣做的好處是:可以在目標對象實現的基礎上,增強額外的功能操作,即擴展目標
009-java中常用的單個鍵值對
RKE tab string class lan integer eva guava 鍵值對 1、Java 6提供AbstractMap.SimpleEntry<K,V>和AbstractMap.SimpleImmutableEntry<K,V>
java中輸入三個字元後,按各字元的ASCII碼從小到大的順序輸出這三個字元。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanne
Java 中atomic 類底層機制、協程
1、Java 中atomic 類底層機制 atomic類:AtomicInteger 等,其底層使用CAS機制,CAS 的底層實現時unsafe的compareAndSwapInt(this,valueOffset, expect, update)方法,其保證V , A, B 的原子性;CAS
java中的垃圾處理機制
目錄 一、出現的問題 二、解決的方法。 三、普通物件的垃圾回收機制是如何工作的? 1. 判斷哪些物件是垃圾 1.1 引用計數演算法 1.2 可達性分析演算法 2. JVM堆模型/分代 3. 垃圾收集演算法 3.1 標記-清除演算法 3.2 複製演算法
java中的類載入機制
今天看了許多大牛的解釋,現在來做個總結: 類的載入機制過程是指由jvm的類載入器載入class位元組碼檔案進入記憶體的過程;(暫且這樣理解) 類載入器可以分為引導類載入器,擴充套件類載入器,系統類載入器;有些地方又可以這樣分:啟動類載入器,自定義載入器。 類載入機制過程: