getX() и setX().
class Hide {
private int field = 42;
}
...
Hide hide = new Hide();
Field field = Hide.class.getDeclaredField("field");
field.setAccessible(true);
int fieldValue = (int) field.get(hide);
#java #private #access
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍3❤1
Какие логические операции и операторы вы знаете?
#java #logical #operations
& Логическое AND (И);
&& Сокращённое AND;
| Логическое OR (ИЛИ);
|| Сокращённое OR;
^ Логическое XOR (исключающее OR (ИЛИ));
! Логическое унарное NOT (НЕ);
&= AND с присваиванием;
|= OR с присваиванием;
^= XOR с присваиванием;
== Равно;
!= Не равно;
?:: Тернарный (троичный) условный оператор.
#java #logical #operations
❤6🔥2👏2
public class One {
public static void go() {
System.out.print("one ");
}
}
public class Two extends One {
public static void go() {
System.out.print("two ");
}
}
public class Three extends Two {
public static void go() {
System.out.print("three ");
}
}
public class Quest {
public static void main(String[] args) {
One one = new One();
one.go();
One two = new Two();
two.go();
Two two2 = new Three();
two2.go();
}
}
#java #quest
Что выведет код?
Anonymous Quiz
44%
one two three
21%
one one two
10%
one one one
24%
ошибка компиляции
👍10❤3🎉2🤔1
Сначала вызываются все статические блоки в очередности от первого статического блока корневого предка и выше по цепочке иерархии до статических блоков самого класса.
Затем вызываются нестатические блоки инициализации корневого предка, конструктор корневого предка и так далее вплоть до нестатических блоков и конструктора самого класса.
1️⃣ Parent static block(s) → Child static block(s)
2️⃣ Parent non-static block(s) → Parent constructor
→ Child non-static block(s) → Child constructor
Пример:
public class Alert {
public Alert(String message) {
System.out.println(message);
}
}
public class Parent {
public static Alert statVar1 = new Alert("Parent: static variable (statVar1)");
public static Alert statVar2;
static {
statVar2 = new Alert("Parent: static initialization block (statVar2)");
}
public Alert var1 = new Alert("Parent: variable (var1)");
public Alert var2;
{
var2 = new Alert("Parent: initialization block (var2)");
}
public Alert var3 = new Alert("Parent: variable (var3)");
public static Alert statVar3 = new Alert("Parent: static variable (statVar3)");
public Alert contructorVar;
public Parent() {
contructorVar = new Alert("Parent: constructor (contructorVar)");
}
}
public class Child extends Parent {
public static Alert statVar1 = new Alert("Child: static variable (statVar1)");
public static Alert statVar2;
static {
statVar2 = new Alert("Child: static initialization block (statVar2)");
}
public Alert var1 = new Alert("Child: variable (var1)");
public Alert var2;
{
var2 = new Alert("Child: initialization block (var2)");
}
public Alert var3 = new Alert("Child: variable (var3)");
public static Alert statVar3 = new Alert("Child: static variable (statVar3)");
public Alert contructorVar;
public Child() {
contructorVar = new Alert("Child: constructor (contructorVar)");
}
}
public class Test {
public static void main(String[] args) {
new Child();
}
}
Вывод консоли:
Parent: static variable (statVar1)
Parent: static initialization block (statVar2)
Parent: static variable (statVar3)
Child: static variable (statVar1)
Child: static initialization block (statVar2)
Child: static variable (statVar3)
Parent: variable (var1)
Parent: initialization block (var2)
Parent: variable (var3)
Parent: constructor (contructorVar)
Child: variable (var1)
Child: initialization block (var2)
Child: variable (var3)
Child: constructor (contructorVar)
#java #initialization #static #block #constructor
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2❤🔥2🔥2
🔥6🤯2🎉1
Существуют два основных способа передачи параметров в методы: "по значению" (pass-by-value) и "по ссылке" (pass-by-reference). В первом случае метод работает с копией значения параметра, не изменяя исходное значение. Во втором случае метод получает ссылку на объект или переменную, и любые изменения в параметре отражаются на исходном объекте или переменной.
Понимание разницы между этими способами важно для правильной работы программы и отладки, так как правила могут различаться в разных языках программирования.
В Java параметры всегда передаются "по значению", однако при передаче ссылочного типа данных можно изменить сам объект.
#java #pass #value #reference
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥1👏1
public class Quest {
public static void main(String[] args) {
Value val = new Value(1);
System.out.print(val.i);
System.out.print(change(val).i);
System.out.print(val.i);
}
public static Value change(Value val) {
val.i = 2;
return val;
}
static class Value {
int i;
public Value(int i) {
this.i = i;
}
}
}#java #quest
👍2
👍6🤯2😱1🎉1🤡1
// Для импорта конкретного статического члена
import static package.Clazz.member;
// Для импорта всех статических членов класса
import static package.Clazz.*;
Пример:
public class MathUtils {
public static final double PI = 3.141592653589793;
public static int add(int a, int b) {
return a + b;
}
public static int subtract(int a, int b) {
return a - b;
}
}
import static MathUtils.PI;
import static MathUtils.add;
public class Main {
public static void main(String[] args) {
System.out.println("Value of PI: " + PI);
System.out.println("Addition result: " + add(5, 3));
}
}
import static MathUtils.*;
public class Main {
public static void main(String[] args) {
System.out.println("Value of PI: " + PI);
System.out.println("Addition result: " + add(5, 3));
System.out.println("Subtraction result: " + subtract(5, 3));
}
}
Плюсы: читаемость, компактность кода.
Минусы:
- не очевидно откуда берется поле или метод
- импорт всех статических членов может привести к конфликтам имен, если разные классы содержат статические члены с одинаковыми именами
#java #static #import
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2✍1👏1🤡1👨💻1
🤯4🎉3👍2😱1🤩1😍1
public в MainClass до private в Class extends MainClass).attempting to use incompatible return type.
public class Animal {
public Animal eat() {
System.out.println("animal eat");
return null;
}
public Long calc() {
return null;
}
}
public class Dog extends Animal {
public Dog eat() {
return new Dog();
}
/*attempting to use incompatible return type
public Integer calc() {
return null;
}
*/
}
#java #override
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2✍1👍1
Конструктор по умолчанию (Default Constructor)
Это конструктор без параметров, который автоматически создается компилятором, если в классе не объявлено ни одного конструктора. Он будет пустым и не делает ничего, кроме вызова конструктора суперкласса.
public class MyClass {
private int number;
private String text;
// Компилятор создаст конструктор по умолчанию:
// public MyClass() {
// super();
// }
}
Конструктор с параметрами (Parameterized Constructor)
Это конструктор, который принимает один или несколько параметров, используемых для инициализации полей класса. Если объявлен хотя бы один конструктор с параметрами, конструктор по умолчанию больше не создается автоматически (его нужно явно определить, если он нужен).
public class MyClass {
private int number;
private String text;
public MyClass(int number, String text) {
this.number = number;
this.text = text;
}
}
Конструктор копирования (Copy Constructor)
Это конструктор, который создает новый объект как копию существующего объекта того же класса.
public class MyClass {
private int number;
private String text;
// Конструктор копирования
public MyClass(MyClass other) {
this.number = other.number;
this.text = other.text;
}
}
#java #constructor
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥1👨💻1
1. Обычные классы (Regular Classes)
Это наиболее распространенные классы, которые вы создаете для определения объектов. Они могут содержать поля, методы, конструкторы и вложенные классы.
public class MyClass {
private int field;
public MyClass(int field) {
this.field = field;
}
public void method() {
// some code
}
}
2. Абстрактные классы (Abstract Classes)
Абстрактные классы не могут быть созданы как объекты напрямую. Они предназначены для предоставления общей функциональности, которую подклассы должны реализовать или дополнить.
public abstract class AbstractClass {
public abstract void abstractMethod();
public void concreteMethod() {
// some code
}
}
3. Вложенные классы (Nested Classes)
Классы, объявленные внутри другого класса. Они могут быть статическими или нестатическими.
🔹 Статические вложенные классы (Static Nested Classes):
Эти классы могут быть созданы без экземпляра внешнего класса.
public class OuterClass {
static class StaticNestedClass {
// some code
}
}
🔹 Внутренние классы (Inner Classes):
Эти классы имеют доступ ко всем членам внешнего класса и создаются в контексте экземпляра внешнего класса.
public class OuterClass {
class InnerClass {
// some code
}
}
4. Локальные классы (Local Classes)
Классы, объявленные внутри метода, конструктора или блока. Они имеют доступ к финальным переменным из охватывающего метода.
public class OuterClass {
public void method() {
class LocalClass {
// some code
}
LocalClass local = new LocalClass();
}
}
5. Анонимные классы (Anonymous Classes)
Классы без имени, создаваемые на месте для реализации интерфейса или наследования от класса. Часто используются для создания экземпляров интерфейсов или абстрактных классов.
public class OuterClass {
public void method() {
Runnable runnable = new Runnable() {
@Override
public void run() {
// some code
}
};
}
}
6. Перечисления (Enums)
Специальные классы, представляющие набор констант. Они могут содержать поля, методы и конструкторы.
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
7. Интерфейсы (Interfaces)
Технически не классы, но важная часть объектно-ориентированного программирования в Java. Интерфейсы определяют контракты, которые должны быть реализованы классами.
public interface MyInterface {
void myMethod();
}
8. Записи (Records)
Нововведение в Java 14 (в предварительном виде) и официально в Java 16. Они предоставляют компактный способ создания неизменяемых классов с полями и автоматически сгенерированными методами, такими как
equals, hashCode и toString.
public record Point(int x, int y) {}
#java #classes
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥5❤🔥1👏1👨💻1
Какие побитовые операции вы знаете?
#java #bitwise
~ Побитовый унарный оператор NOT;
& Побитовый AND;
&= Побитовый AND с присваиванием;
| Побитовый OR;
|= Побитовый OR с присваиванием;
^ Побитовый исключающее XOR;
^= Побитовый исключающее XOR с присваиванием;
>> Сдвиг вправо (деление на 2 в степени сдвига);
>>= Сдвиг вправо с присваиванием;
>>> Сдвиг вправо без учёта знака;
>>>= Сдвиг вправо без учёта знака с присваиванием;
<< Сдвиг влево (умножение на 2 в степени сдвига);
<<= Сдвиг влево с присваиванием.
#java #bitwise
👍18🔥5❤1👏1