在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转化的详细阐述。在实际开发中,我们可以根据需要进行选择,使用合适的方法来实现数据之间的转换。