Переходный процесс в Java используется для обозначения переменной, которую нельзя сериализовать, когда она сохраняется в потоках байтов. Это ключевое слово играет важную роль для ограничений безопасности в Java. Он игнорирует исходное значение переменной и сохраняет значение по умолчанию для этого типа данных переменной.
Что такое Transient в Java?
Transient — это модификатор переменных, который используется для сериализации. Теперь, что такое сериализация? Сериализация в Java — это механизм, который используется для преобразования состояния объекта в поток байтов. Во время сериализации, если вы не хотите сохранять значение определенной переменной в файле, используйте ключевое слово transient.
Синтаксис:
private transient <member variable>;
или
transient private <member variable>;
Если вы определите какой-либо элемент данных как временный, он не будет сериализован. Это связано с тем, что каждое поле, помеченное как переходное, не будет сериализовано. Это временное ключевое слово можно использовать, чтобы указать виртуальной машине Java (JVM), что временная переменная не является частью постоянного состояния объекта.
Давайте напишем очень простой пример, чтобы понять работу Transient в Java.
class Demo implements Serializable
{
// Making human transient
private transient String human;
transient int age;
// serialize other fields
private String name, address;
Date dob;
// rest of the code
}
Здесь я создал класс под названием Demo, который реализует Serializable. Член данных возраста класса Demo объявлен как временный, его значение не будет сериализовано. Но если вы десериализуете объект, вы получите значение по умолчанию для временной переменной.
Для чего и когда использовать?
Transient в Java используется для указания того, что поле не должно быть частью процесса сериализации.
Модификатор Transient может применяться к переменным-членам класса, чтобы отключить сериализацию для этих переменных-членов. Каждое поле, помеченное как переходное, не будет сериализовано. Это временное ключевое слово можно использовать, чтобы указать виртуальной машине Java, что временная переменная не является частью постоянного состояния объекта.
Возможно, у вас возник вопрос в голове. Когда использовать?
Ответ на это будет:
- Вы можете использовать это ключевое слово Transient, когда у вас есть поля, производные/вычисляемые из других полей в экземпляре класса.
- Используйте его с полями, которые не помечены как «сериализуемые» внутри JDK или кода приложения. Это происходит потому, что классы, которые не реализуют сериализуемый интерфейс, ссылаются в пределах любого сериализуемого класса и не могут быть сериализованы и вызовут исключение” java.io.NotSerializableException».
Обратите внимание, что эти несериализуемые ссылки должны быть помечены как «переходные» перед сериализацией основного класса.
Как использовать Transient с ключевым словом Final?
Transient в Java может использоваться с ключевым словом final, потому что он ведет себя по-разному в разных ситуациях, что обычно не происходит с другими ключевыми словами в Java.
Посмотрите на этот пример.
private String
firstName;
private String
lastName;
//final field 1
public final transient String pass= "password";
//final field 2
public final transient Lock lock = Lock.getLock("demo");
Теперь, когда вы снова запустите сериализацию (запись / чтение), вы получите следующий вывод:
Kenny
Stark
password
null
Это потому, что Мы отметили «проход» для переходного процесса, и все же это поле было сериализовано. Для аналогичного объявления блокировка не была сериализована.
Причина в том, что всякий раз, когда любое конечное поле оценивается как константное выражение, оно сериализуется JVM, игнорируя наличие переходного ключевого слова.
Разница между Transient и Volatile
Volatile и Transient — это два совершенно разных ключевых слова, которые используются в Java. Transient используется во время сериализации Java-объекта. Volatile связана с видимостью переменных, измененных несколькими потоками.
Единственное сходство между этими ключевыми словами состоит в том, что они являются менее используемыми или необычными ключевыми словами и не так популярны, как общедоступные, статические или конечные.
