在Java程序設計中,Object轉化是非常重要的,因為很多時候我們需要把一個對象轉化為另一個對象,或者將對象轉換為字符串等。本文將從多個方面詳細闡述Java中的Object轉化。
一、Java中的類型轉換
Java中的類型轉換涉及到兩大類別:基本類型轉換和引用類型轉換。
1. 基本類型轉換
Java中的基本數據類型有int、short、long、double、float、byte和char。它們之間可以進行互相轉換。
例如,我們可以將int型數據轉為float型數據,如下代碼所示:
int i = 10;
float f = (float) i;
因為int型數據可以有小數部分,所以可以強制類型轉換為float型數據。
2. 引用類型轉換
在Java中,所有非基本數據類型都是引用類型。引用類型轉換主要有以下幾種情況:
(1) 子類向父類轉換
子類可以轉換為父類,但是反過來是不行的。例如:
class Animal {
public void move() {
System.out.println("Animal's move.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("Dog's bark.");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = dog;
animal.move(); //可以調用,輸出為"Animal's move."
//dog = animal; //編譯錯誤,不能將父類轉換為子類
}
}
(2) 父類向子類轉換
父類轉換為子類時需要進行強制類型轉換。例如:
class Animal {
public void move() {
System.out.println("Animal's move.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("Dog's bark.");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
Dog dog = (Dog) animal;
dog.bark(); //可以調用,輸出為"Dog's bark."
}
}
(3) 接口向實現類轉換
接口轉換為實現類時需要進行強制類型轉換。例如:
interface Person {
void eat();
}
class Student implements Person {
public void eat() {
System.out.println("Student eats.");
}
public void study() {
System.out.println("Student studies.");
}
}
public class Test {
public static void main(String[] args) {
Person person = new Student();
Student student = (Student) person;
student.study(); //可以調用,輸出為"Student studies."
}
}
二、Java中的字符串轉換
在Java中,字符串轉換主要涉及到以下幾個方面:
1. 字符串轉數字
可以使用parseXXX()方法將字符串轉為數字,其中XXX可以是int、double、float等基本數據類型。例如:
int i = Integer.parseInt("10");
double d = Double.parseDouble("3.14");
float f = Float.parseFloat("2.5");
2. 數字轉字符串
可以使用valueOf()方法將數字轉為字符串,或者使用+””將數字轉為字符串。例如:
String str1 = String.valueOf(10);
String str2 = 3.14 + "";
String str3 = Integer.toString(20);
3. 字符串轉字符數組
可以使用toCharArray()方法將字符串轉為字符數組。例如:
String str = "hello";
char[] ch = str.toCharArray();
4. 字符數組轉字符串
可以使用String的構造方法將字符數組轉為字符串。例如:
char[] ch = {'h', 'e', 'l', 'l', 'o'};
String str = new String(ch);
三、Java中的序列化和反序列化
Java中的序列化(Serialization)主要是將Java對象轉化為字節序列,以便於在網絡或文件中傳輸或保存。反序列化(Deserialization)則是將字節序列反向轉化為Java對象。
Java中提供了Serializable接口,它是一個標記接口,表示該類可以被序列化和反序列化。同時也提供了ObjectOutputStream和ObjectInputStream類來實現序列化和反序列化操作。
下面是一個例子:
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class Test {
public static void main(String[] args) {
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));
oos.writeObject(new Person("Tom", 18));
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("person.txt")));
Person person = (Person) ois.readObject();
System.out.println(person);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
當我們運行該程序時,會輸出:Person [name=Tom, age=18],這說明我們已經成功地將一個對象序列化為字節流並反序列化為新的對象。
四、Java中的JSON轉換
在Java中,我們可以使用一些庫來實現JSON格式數據和Java對象之間的轉換,比較常用的有Gson和Jackson。
以Gson為例,下面是一個例子:
首先需要在pom.xml中添加相關依賴:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
然後就可以使用Gson中的toJson()和fromJson()方法來進行JSON和Java對象之間的轉換,例如:
import com.google.gson.Gson;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
//Java對象轉JSON
Person person = new Person("Tom", 18);
String json = gson.toJson(person);
System.out.println(json); //輸出:{"name":"Tom","age":18}
//JSON轉Java對象
Person newPerson = gson.fromJson(json, Person.class);
System.out.println(newPerson); //輸出:Person [name=Tom, age=18]
}
}
五、Java中的XML轉換
在Java中,我們也可以使用一些庫來實現XML格式數據和Java對象之間的轉換,比較常用的有JAXB和XStream。
以JAXB為例,我們可以使用JAXBContext來初始化一個上下文對象,然後就可以使用Marshaller和Unmarshaller來分別實現Java對象轉XML和XML轉Java對象的操作。例如:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class Test {
public static void main(String[] args) {
try {
JAXBContext context = JAXBContext.newInstance(Person.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
//Java對象轉XML
Person person = new Person("Tom", 18);
marshaller.marshal(person, System.out);
//XML轉Java對象
Unmarshaller unmarshaller = context.createUnmarshaller();
Person newPerson = (Person) unmarshaller.unmarshal(new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><person><name>Tom</name><age>18</age></person>"));
System.out.println(newPerson);
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上就是Java中的Object轉化的詳細闡述。在實際開發中,我們可以根據需要進行選擇,使用合適的方法來實現數據之間的轉換。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159187.html