❶ java用字元串動態創建對象
類似這樣動態創建對象的,都是用到JAVA的反射機制來實現的,有時間去研究一下吧。給個代碼。try {
Class c =Class.forName("java.lang.String");
String s = (String)c.newInstance();
System.out.println(s.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
❷ java里,請問這種方式創建了幾個字元串對象
2個
❸ java中string類創建對象
Java中String是一個特殊的包裝類數據有兩種創建形式:
String s = "abc";
String s = new String("abc");
第一種先在棧中創建一個對String類的對象引用變數s,然後去查找"abc"是否被保存在字元串常量池中,如果沒有則在棧中創建三個char型的值'a'、'b'、'c',然後在堆中創建一個String對象object,它的值是剛才在棧中創建的三個char型值組成的數組{'a'、'b'、'c'},接著這個String對象object被存放進字元串常量池,最後將s指向這個對象的地址,如果"abc"已經被保存在字元串常量池中,則在字元串常量池中找到值為"abc"的對象object,然後將s指向這個對象的地址。
第一種特點:JVM會自動根據棧中數據的實際情況來決定是否有必要創建新對象。
第二種可以分解成兩步1、String object = "abc"; 2、String s = new String(object); 第一步參考第一種創建方式,而第二步由於"abc"已經被創建並保存到字元串常量池中,因此jvm只會在堆中新創建一個String對象,它的值共享棧中已有的三個char型值。
第二種特點:一概在堆中創建新對象,而不管其字元串值是否相等,是否有必要創建新對象。
在講字元串比較前,必須要了解==和equals的區別:
因為java所有類都繼承於Object基類,而Object中equals用==來實現,所以equals和==是一樣的,都是比較對象地址,java api里的類大部分都重寫了equals方法,包括基本數據類型的封裝類、String類等。對於String類==用於比較兩個String對象的地址,equals則用於比較兩個String對象的內容(值)。
❹ 關於JAVA字元串對象創建的問題
String a = 「abc」;
String b = new String(「abc」);
a指向常量區的「abc」
b指向變數區「abc」
若還是 String a = 「abc」; String b = 「abc」;
a和b均指向常量區的「abc」,指向相同。
❺ String 創建幾個對象問題(詳解
1
String a = new String("b");
創建兩個對象
"b"在String pool池中,當創建對象時,堆中會拷貝String池中」b「作為一個對象b1,
然後建立一個新對象該對象的引用a指向b1;
所以創建兩個對象。
2
String c="b";
"b"在String池中,c指向該對象;
3
String a="i"+"u"+"s0";
這相當於String a="ius0".當JVM執行到這一句時,就在String pool里找,如果String pool里沒有這個字元串,就會產生一個對象(見java面試寶典174頁)
如果String pool里有這些字元串就產生2個對象 原因:每做一個連接便會產生一個對象.
4
String a="b";
a=a+"b";//有兩個對象,第一a是個對象 2 a+"b"為一個對象
這時 原來 a指向的對象就變為垃圾對象,但後面又被用到所以沒被回收 和"b'進行連接成為bb
5
String a="b";
a=a+"c";//有兩個對象,第一"c"是個對象 2 a+"c"為一個對象
此時a原來指向的對象成為垃圾對象,由jvm垃圾回收機制回收
6
String c;創建對象個數為 0;
初始化為null
❻ java中如何創建int char String類型的對象
Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類
boolean -->Boolean
char --->Character
byte -->Byte
short -->Short
int -->Integer
long -->Long
float -->Float
double -->Double
引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關。同時為了面向對象操作的一致性,這些基本類型都有相應的封裝類型:Integer、Short、Long、Byte、Float、Double、Character等。
因為封裝類型是對象,所以可以進行相應的很多對象能力函數操作,這樣就可以提供很多基本類型難以完成的工作的完成和實現。
你可以通過以下方式來聲明該類型。
int a,a為int類型的變數
char a,a為char類型的
String對象
1. 首先String不屬於8種基本數據類型,String是一個對象。
因為對象的默認值是null,所以String的默認值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性。
2. new String()和new String(「」)都是申明一個新的空字元串,是空串不是null;
3. String str=」punkll」;
String str=new String (「punkll」);的區別:
在這里,我們不談堆,也不談棧,只先簡單引入常量池這個簡單的概念。
常量池(constant pool)指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。它包括了關於類、方法、介面等中的常量,也包括字元串常量。
看例1:
String s0=」punkll」;
String s1=」punkll」;
String s2=」punk」 + 「ll」;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
結果為:
true
true
首先,我們要知結果為道Java會確保一個字元串常量只有一個拷貝。
因為例子中的s0和s1中的」punkll」都是字元串常量,它們在編譯期就被確定了,所以s0==s1為true;而」punk」和」ll」也都是字元串常量,當一個字元串由多個字元串常量連接而成時,它自己肯定也是字元串常量,所以s2也同樣在編譯期就被解析為一個字元串常量,所以s2也是常量池中」punkll」的一個引用。
所以我們得出s0==s1==s2;
用new String() 創建的字元串不是常量,不能在編譯期就確定,所以new String() 創建的字元串不放入常量池中,它們有自己的地址空間。
看例2:
String s0=」punkll」;
String s1=new String(」punkll」);
String s2=」punk」 + new String(「ll」);
System.out.println( s0==s1 );
System.out.println( s0==s2 );
System.out.println( s1==s2 );
結果為:
false
false
false
例2中s0還是常量池中」punkll」的應用,s1因為無法在編譯期確定,所以是運行時創建的新對象」punkll」的引用,s2因為有後半部分new String(「ll」)所以也無法在編譯期確定,所以也是一個新創建對象」punkll」的應用;明白了這些也就知道為何得出此結果了。
❼ 如何用html字元串創建jquery對象
用html字元串創建jquery對象的方法是通過js預發構造出來的。
以下通過div的構造後,追加字元串為例來說明
1、創建一個js變數,存放構造div的表達式:
var string = '<div><input type="text" value="val" /></div>';
2、通過1創建的div,在其標簽之間追加html內容:
$('<div/>').html(string).contents();
以上1和2主要執行過程如下:
$('<div/>')是一個並不存在的dom對象是通過執行js表達式動態構建出來的
$('<div/>').html(string) 追加string內容到div之間作為子節點
.contents()把上面創建的div作為jquery對象來檢索內容,創建一個真正的div
❽ javascript 創建字元串對象
對於基礎類型的變數是不能給它添加自定義屬性的,包括字元串、數字、布爾值等等。但new String()卻是一個對象,對象是可以添加屬性的,所以str = 'Hello world'是基礎類型,添加新屬性name是不會成功的,列印結果也就是undefined。
❾ 怎麼創建單字元輸入對象
、 枚舉法
由於同事的需求只涉及到基本類型的創建,由於基本對象的個數是有限的(也就那麼幾個),所以我們這里可以用枚舉的方式動態的創建想要的對象,雖然有些繁瑣,但是還是可以實現我們的需求的。關鍵代碼如下:
/**
* 根據傳入的類名和值,動態構造該類的實例
*
* @param _sClassName
* 要構造的類名 如:java.lang.String
* @param _sRealValue
* 要創建的對象的值,比如「wuguowei」
* @return 返回String對象,即值為「wuguowei」的字元串
* @throws Exception
*/
private Object getAttributeObject(String _sClassName, String _sRealValue)
throws Exception {
//1.載入類對象
Class attrObjClass = Class.forName(_sClassName);
//2.如果是Long類
if (attrObjClass.isInstance(new Long(0))) {
return new Long(_sRealValue);
}
//3.如果是Integer類
if (attrObjClass.isInstance(new Integer(0))) {
return new Integer(_sRealValue);
}
//4.其他類型……
//5.返回當前類的實例對象
return attrObjClass;
}
上面的代碼雖然可以通過枚舉的方式實現我們的需求,但是很繁瑣,需要對每個對象進行枚舉,這里還只支持傳入一個String類型的參數,如果要傳入多個參數,那麼這個函數的邏輯將會很復雜。
二、 Constructor反射法
我們應該好好想想,這么NB的java語言應該沒這么笨,應該有更簡單的方法。經過同事的討論後,發現一種比較好的方式。就是通過Constructor類反射出對應的類對象,接著再獲取指定參數的構造函數,最後根據傳入的值實例化對象即可得到我們想要的對象。通過這個方法,我們會發現我們的代碼很簡單,而且很容易懂。另外,這個方法可以動態構造任何java對象。閑話少說,直接看代碼吧。具體代碼如下:
/**
* 根據傳入的類名和值,動態構造該類的實例
*
* @param _sClassName
* 要構造的類名 如:java.lang.String
* @param _sRealValue
* 要創建的對象的值,比如「wuguowei」
* @return 返回String對象,即值為「wuguowei」的字元串
* @throws Exception
*/
private Object getAttributeObject1(String _sClassName, String _sRealValue)
throws Exception {
// 1. 根據指定的類名,獲取到對應的類
Class clazz = Class.forName(_sClassName);
// 2. 獲取指定參數類型的構造函數,這里傳入我們想調用的構造函數所需的參數類型
Constructor constructor = clazz.getConstructor(String.class);
// 3. 根據構造函數,創建指定類型的對象,傳入的參數個數需要與上面傳入的參數類型個數一致
Object object = constructor.newInstance(_sRealValue);
// 4.返回對象
return object;
}
三、 執行代碼
調用上邊的代碼如下:
CreateClassByString aCreateClassByString = new CreateClassByString();
Object oObject = aCreateClassByString.getAttributeObject1(
"java.lang.String", "wuguowei");
System.out.println("結果::"+oObject);
執行結果如下:
結果::wuguowei