├── .gitignore ├── .idea ├── .gitignore ├── misc.xml └── modules.xml ├── README.md ├── belajar-java-oop.iml └── src ├── Employee.java ├── Manager.java ├── ManagerApp.java ├── Parent.java ├── ParentApp.java ├── Person.java ├── PersonApp.java ├── PolymorphismApp.java ├── Shape.java ├── ShapeApp.java ├── VicePresident.java └── programmer └── zaman └── now ├── annotation ├── Fancy.java └── NotBlank.java ├── application ├── AnimalApp.java ├── Application.java ├── CarApp.java ├── CategoryApp.java ├── CompanyApp.java ├── DatabaseApp.java ├── EnumApp.java ├── EqualsApp.java ├── HelloWorldApp.java ├── LocationApp.java ├── ReadApp.java ├── RecordApp.java ├── ReflectionApp.java ├── StackTraceApp.java ├── StaticApp.java └── ValidationApp.java ├── data ├── Animal.java ├── Application.java ├── Avanza.java ├── Bus.java ├── Car.java ├── Cat.java ├── Category.java ├── City.java ├── Company.java ├── Constant.java ├── Country.java ├── CreateUserRequest.java ├── Customer.java ├── Data.java ├── HasBrand.java ├── HelloWorld.java ├── IsMaintenance.java ├── Level.java ├── Location.java ├── LoginRequest.java ├── Product.java ├── ProductApp.java └── SocialMedia.java ├── error ├── BlankException.java ├── DatabaseError.java └── ValidationException.java └── util ├── MathUtil.java └── ValidationUtil.java /.gitignore: -------------------------------------------------------------------------------- 1 | out -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Belajar Java Dasar 2 | 3 | Ini adalah project belajar java dasar di channel : 4 | 5 | Programmer Zaman Now -------------------------------------------------------------------------------- /belajar-java-oop.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Employee.java: -------------------------------------------------------------------------------- 1 | class Employee { 2 | 3 | String name; 4 | 5 | Employee(String name) { 6 | this.name = name; 7 | } 8 | 9 | void sayHello(String name) { 10 | System.out.println("Hi " + name + ", My Name Is Employee " + this.name); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Manager.java: -------------------------------------------------------------------------------- 1 | class Manager extends Employee { 2 | 3 | String company; 4 | 5 | Manager(String name) { 6 | super(name); 7 | } 8 | 9 | Manager(String name, String company) { 10 | super(name); 11 | this.company = company; 12 | } 13 | 14 | void sayHello(String name) { 15 | System.out.println("Hi " + name + ", My Name Is Manager " + this.name); 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /src/ManagerApp.java: -------------------------------------------------------------------------------- 1 | public class ManagerApp { 2 | public static void main(String[] args) { 3 | 4 | 5 | var manager = new Manager("Eko"); 6 | manager.sayHello("Budi"); 7 | 8 | var vp = new VicePresident("Joko"); 9 | vp.sayHello("Budi"); 10 | 11 | System.out.println(manager); 12 | System.out.println(manager.toString()); 13 | System.out.println(vp); 14 | System.out.println(vp.toString()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Parent.java: -------------------------------------------------------------------------------- 1 | class Parent { 2 | String name; 3 | void doIt(){ 4 | System.out.println("Do it in parent"); 5 | } 6 | } 7 | 8 | class Child extends Parent{ 9 | String name; 10 | void doIt(){ 11 | System.out.println("Do it in child"); 12 | System.out.println("Parent name is " + super.name); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/ParentApp.java: -------------------------------------------------------------------------------- 1 | public class ParentApp { 2 | public static void main(String[] args) { 3 | 4 | 5 | Child child = new Child(); 6 | child.name = "Eko"; 7 | child.doIt(); 8 | System.out.println(child.name); 9 | 10 | Parent parent = (Parent) child; 11 | parent.doIt(); 12 | System.out.println(parent.name); 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Person.java: -------------------------------------------------------------------------------- 1 | class Person { 2 | String name; 3 | String address; 4 | final String country = "Indonesia"; 5 | 6 | Person(String name, String address){ 7 | this.name = name; 8 | this.address = address; 9 | } 10 | 11 | Person(String paramName){ 12 | this(paramName, null); 13 | } 14 | 15 | Person(){ 16 | this(null); 17 | } 18 | 19 | void sayHello(String name){ 20 | System.out.println("Hello " + name + ", My Name is " + this.name); 21 | } 22 | } -------------------------------------------------------------------------------- /src/PersonApp.java: -------------------------------------------------------------------------------- 1 | public class PersonApp { 2 | public static void main(String[] args) { 3 | 4 | var person1 = new Person("Eko", "Subang"); 5 | 6 | System.out.println(person1.name); 7 | System.out.println(person1.address); 8 | System.out.println(person1.country); 9 | 10 | person1.sayHello("Budi"); 11 | 12 | Person person2 = new Person("Budi"); 13 | 14 | Person person3; 15 | person3 = new Person(); 16 | person3.name = "Joko"; 17 | person3.sayHello("Budi"); 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/PolymorphismApp.java: -------------------------------------------------------------------------------- 1 | public class PolymorphismApp { 2 | public static void main(String[] args) { 3 | 4 | 5 | Employee employee = new Employee("EKo"); 6 | employee.sayHello("Budi"); 7 | 8 | employee = new Manager("Eko"); 9 | employee.sayHello("Budi"); 10 | 11 | employee = new VicePresident("Eko"); 12 | employee.sayHello("Budi"); 13 | 14 | sayHello(new Employee("Eko")); 15 | sayHello(new Manager("Joko")); 16 | sayHello(new VicePresident("Budi")); 17 | } 18 | 19 | static void sayHello(Employee employee) { 20 | if (employee instanceof VicePresident) { 21 | VicePresident vicePresident = (VicePresident) employee; 22 | System.out.println("Hello VP " + vicePresident.name); 23 | } else if (employee instanceof Manager) { 24 | Manager manager = (Manager) employee; 25 | System.out.println("Hello Manager " + manager.name); 26 | } else { 27 | System.out.println("Hello " + employee.name); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Shape.java: -------------------------------------------------------------------------------- 1 | class Shape { 2 | 3 | int getCorner(){ 4 | return 0; 5 | } 6 | 7 | } 8 | 9 | class Rectangle extends Shape { 10 | 11 | int getCorner(){ 12 | return 4; 13 | } 14 | 15 | int getParentCorner(){ 16 | return super.getCorner(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/ShapeApp.java: -------------------------------------------------------------------------------- 1 | public class ShapeApp { 2 | public static void main(String[] args) { 3 | 4 | 5 | var shape = new Shape(); 6 | System.out.println(shape.getCorner()); 7 | 8 | var rectangle = new Rectangle(); 9 | System.out.println(rectangle.getCorner()); 10 | System.out.println(rectangle.getParentCorner()); 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/VicePresident.java: -------------------------------------------------------------------------------- 1 | class VicePresident extends Manager { 2 | 3 | VicePresident(String name){ 4 | super(name); 5 | } 6 | 7 | void sayHello(String name){ 8 | System.out.println("Hi " + name + ", My Name Is VP " + this.name); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/annotation/Fancy.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target({ElementType.TYPE, ElementType.METHOD}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Fancy { 11 | 12 | String name(); 13 | 14 | String[] tags() default {}; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/annotation/NotBlank.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target({ElementType.FIELD}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface NotBlank { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/AnimalApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.annotation.Fancy; 4 | import programmer.zaman.now.data.Animal; 5 | import programmer.zaman.now.data.Cat; 6 | 7 | @Fancy(name = "AnimalApp", tags = {"application", "java"}) 8 | public class AnimalApp { 9 | public static void main(String[] args) { 10 | 11 | 12 | Animal animal = new Cat(); 13 | animal.name = "Puss"; 14 | animal.run(); 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/Application.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.*; 4 | 5 | public class Application { 6 | public static void main(String[] args) { 7 | 8 | Product product = new Product("Mac Book Pro", 30_000_000); 9 | System.out.println(product.name); 10 | System.out.println(product.price); 11 | 12 | Data data = new Data(); 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/CarApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.Avanza; 4 | import programmer.zaman.now.data.Car; 5 | 6 | public class CarApp { 7 | public static void main(String[] args) { 8 | 9 | Car car = new Avanza(); 10 | System.out.println(car.getTier()); 11 | car.drive(); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/CategoryApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.Category; 4 | 5 | public class CategoryApp { 6 | public static void main(String[] args) { 7 | 8 | 9 | var category = new Category(); 10 | category.setId("ID"); 11 | category.setId(null); 12 | 13 | System.out.println(category.getId()); 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/CompanyApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.Company; 4 | 5 | public class CompanyApp { 6 | public static void main(String[] args) { 7 | 8 | 9 | Company company = new Company(); 10 | company.setName("Programmer Zaman Now"); 11 | 12 | Company.Employee employee = company.new Employee(); 13 | employee.setName("Eko"); 14 | 15 | System.out.println(employee.getName()); 16 | System.out.println(employee.getCompany()); 17 | 18 | Company company2 = new Company(); 19 | company2.setName("Belum Ada"); 20 | 21 | Company.Employee employee2 = company2.new Employee(); 22 | employee2.setName("Budi"); 23 | 24 | System.out.println(employee2.getName()); 25 | System.out.println(employee2.getCompany()); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/DatabaseApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.error.DatabaseError; 4 | 5 | public class DatabaseApp { 6 | public static void main(String[] args) { 7 | connectDatabase("eko", null); 8 | System.out.println("Sukses"); 9 | } 10 | 11 | public static void connectDatabase(String username, String password) { 12 | if (username == null || password == null) { 13 | throw new DatabaseError("Tidak bisa konek ke database"); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/EnumApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.Customer; 4 | import programmer.zaman.now.data.Level; 5 | 6 | public class EnumApp { 7 | public static void main(String[] args) { 8 | 9 | Customer customer = new Customer(); 10 | customer.setName("Eko"); 11 | customer.setLevel(Level.PREMIUM); 12 | 13 | System.out.println(customer.getName()); 14 | System.out.println(customer.getLevel()); 15 | System.out.println(customer.getLevel().getDescription()); 16 | 17 | String levelName = Level.VIP.name(); 18 | System.out.println(levelName); 19 | 20 | Level level = Level.valueOf("PREMIUM"); 21 | System.out.println(level); 22 | 23 | System.out.println("Print Level"); 24 | for (var value : Level.values()) { 25 | System.out.println(value); 26 | } 27 | 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/EqualsApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | public class EqualsApp { 4 | public static void main(String[] args) { 5 | 6 | 7 | String first = "Eko"; 8 | first = first + " " + "Khannedy"; 9 | 10 | System.out.println(first); 11 | 12 | String second = "Eko Khannedy"; 13 | System.out.println(second); 14 | 15 | System.out.println(first == second); 16 | System.out.println(first.equals(second)); 17 | 18 | String third = "Eko Khannedy"; 19 | 20 | System.out.println(second == third); 21 | System.out.println(second.equals(third)); 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/HelloWorldApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.HelloWorld; 4 | 5 | public class HelloWorldApp { 6 | public static void main(String[] args) { 7 | 8 | 9 | HelloWorld english = new HelloWorld(){ 10 | 11 | public void sayHello() { 12 | System.out.println("Hello"); 13 | } 14 | 15 | public void sayHello(String name) { 16 | System.out.println("Hello " + name); 17 | } 18 | }; 19 | 20 | HelloWorld indonesia = new HelloWorld(){ 21 | 22 | public void sayHello() { 23 | System.out.println("Halo"); 24 | } 25 | 26 | public void sayHello(String name) { 27 | System.out.println("Halo " + name); 28 | } 29 | }; 30 | 31 | english.sayHello(); 32 | english.sayHello("Eko"); 33 | 34 | indonesia.sayHello(); 35 | indonesia.sayHello("Eko"); 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/LocationApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.City; 4 | import programmer.zaman.now.data.Location; 5 | 6 | public class LocationApp { 7 | public static void main(String[] args) { 8 | 9 | // var location = new Location(); // ERROR 10 | var city = new City(); 11 | city.name = "Jakarta"; 12 | 13 | System.out.println(city.name); 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/ReadApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | 7 | public class ReadApp { 8 | public static void main(String[] args) { 9 | 10 | try (BufferedReader reader = new BufferedReader(new FileReader("README.md"))) { 11 | 12 | while (true) { 13 | String line = reader.readLine(); 14 | if (line == null) { 15 | break; 16 | } 17 | System.out.println(line); 18 | } 19 | 20 | } catch (Throwable throwable) { 21 | System.out.println("Error membaca file " + throwable.getMessage()); 22 | } 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/RecordApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.LoginRequest; 4 | 5 | public class RecordApp { 6 | public static void main(String[] args) { 7 | 8 | LoginRequest loginRequest = new LoginRequest("eko", "rahasia"); 9 | 10 | System.out.println(loginRequest.username()); 11 | System.out.println(loginRequest.password()); 12 | System.out.println(loginRequest); 13 | 14 | System.out.println(new LoginRequest()); 15 | System.out.println(new LoginRequest("eko")); 16 | System.out.println(new LoginRequest("eko", "rahasia")); 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/ReflectionApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.data.CreateUserRequest; 4 | import programmer.zaman.now.util.ValidationUtil; 5 | 6 | public class ReflectionApp { 7 | public static void main(String[] args) { 8 | 9 | CreateUserRequest request = new CreateUserRequest(); 10 | request.setUsername("eko"); 11 | request.setPassword("eko"); 12 | request.setName("eko"); 13 | 14 | ValidationUtil.validationReflection(request); 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/StackTraceApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | public class StackTraceApp { 4 | public static void main(String[] args) { 5 | 6 | try { 7 | sampleError(); 8 | } catch (RuntimeException exception) { 9 | exception.printStackTrace(); 10 | } 11 | 12 | } 13 | 14 | public static void sampleError() { 15 | try { 16 | String[] names = { 17 | "Eko", "Kurniawan", "Khannedy" 18 | }; 19 | 20 | System.out.println(names[100]); 21 | } catch (Throwable throwable) { 22 | throw new RuntimeException(throwable); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/StaticApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import static programmer.zaman.now.data.Application.PROCESSORS; 4 | import static programmer.zaman.now.data.Constant.*; 5 | import programmer.zaman.now.data.Country; 6 | import programmer.zaman.now.util.MathUtil; 7 | 8 | public class StaticApp { 9 | public static void main(String[] args) { 10 | 11 | System.out.println(APPLICATION); 12 | System.out.println(VERSION); 13 | 14 | System.out.println( 15 | MathUtil.sum(1,1,1,1,1) 16 | ); 17 | 18 | Country.City city = new Country.City(); 19 | city.setName("Subang"); 20 | 21 | System.out.println(city.getName()); 22 | 23 | System.out.println(PROCESSORS); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/application/ValidationApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.application; 2 | 3 | import programmer.zaman.now.annotation.Fancy; 4 | import programmer.zaman.now.data.LoginRequest; 5 | import programmer.zaman.now.error.ValidationException; 6 | import programmer.zaman.now.util.ValidationUtil; 7 | 8 | public class ValidationApp { 9 | 10 | @Fancy(name = "AnimalApp", tags = {"application", "java"}) 11 | public static void main(String[] args) { 12 | 13 | LoginRequest loginRequest = new LoginRequest("eko", "rahasia"); 14 | 15 | try { 16 | ValidationUtil.validate(loginRequest); 17 | System.out.println("Data valid"); 18 | } catch (ValidationException | NullPointerException exception) { 19 | System.out.println("Data tidak valid : " + exception.getMessage()); 20 | } finally { 21 | System.out.println("Selalu di eksekusi"); 22 | } 23 | 24 | 25 | LoginRequest loginRequest2 = new LoginRequest(null, null); 26 | ValidationUtil.validateRuntime(loginRequest2); 27 | System.out.println("Sukses"); 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Animal.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public abstract class Animal { 4 | 5 | public String name; 6 | 7 | public abstract void run(); 8 | } 9 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Application.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Application { 4 | 5 | public static final int PROCESSORS; 6 | 7 | static { 8 | System.out.println("Mengakses class Application"); 9 | PROCESSORS = Runtime.getRuntime().availableProcessors(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Avanza.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Avanza implements Car{ 4 | 5 | public void drive() { 6 | System.out.println("Avanza drive"); 7 | } 8 | 9 | public int getTier() { 10 | return 4; 11 | } 12 | 13 | public String getBrand() { 14 | return "Toyota"; 15 | } 16 | 17 | public boolean isMaintenance() { 18 | return false; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Bus.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Bus implements Car{ 4 | public void drive() { 5 | System.out.println("Bus drive"); 6 | } 7 | 8 | public int getTier() { 9 | return 8; 10 | } 11 | 12 | public String getBrand() { 13 | return "HINO"; 14 | } 15 | 16 | public boolean isMaintenance() { 17 | return false; 18 | } 19 | 20 | public boolean isBig() { 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Car.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | import programmer.zaman.now.annotation.Fancy; 4 | 5 | @Fancy(name = "Car", tags = {"application", "java"}) 6 | public interface Car extends HasBrand, IsMaintenance { 7 | 8 | void drive(); 9 | 10 | int getTier(); 11 | 12 | default boolean isBig() { 13 | return false; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Cat.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Cat extends Animal { 4 | 5 | public void run() { 6 | System.out.println("Cat " + name + " is run"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Category.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Category { 4 | 5 | private String id; 6 | 7 | private boolean expensive; 8 | 9 | public String getId() { 10 | return id; 11 | } 12 | 13 | public void setId(String id) { 14 | if(id != null){ 15 | this.id = id; 16 | } 17 | } 18 | 19 | public boolean isExpensive() { 20 | return expensive; 21 | } 22 | 23 | public void setExpensive(boolean expensive) { 24 | this.expensive = expensive; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/City.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class City extends Location { 4 | } 5 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Company.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Company { 4 | 5 | private String name; 6 | 7 | public String getName() { 8 | return name; 9 | } 10 | 11 | public void setName(String name) { 12 | this.name = name; 13 | } 14 | 15 | public class Employee { 16 | 17 | private String name; 18 | 19 | public String getCompany() { 20 | return Company.this.name; 21 | } 22 | 23 | public String getName() { 24 | return name; 25 | } 26 | 27 | public void setName(String name) { 28 | this.name = name; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Constant.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Constant { 4 | 5 | public static final String APPLICATION = "Belajar Java"; 6 | public static final int VERSION = 1; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Country.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Country { 4 | 5 | private String name; 6 | 7 | public String getName() { 8 | return name; 9 | } 10 | 11 | public void setName(String name) { 12 | this.name = name; 13 | } 14 | 15 | public static class City { 16 | 17 | private String name; 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/CreateUserRequest.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | import programmer.zaman.now.annotation.NotBlank; 4 | 5 | public class CreateUserRequest { 6 | 7 | @NotBlank 8 | private String username; 9 | 10 | @NotBlank 11 | private String password; 12 | 13 | @NotBlank 14 | private String name; 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | public void setName(String name) { 21 | this.name = name; 22 | } 23 | 24 | public String getUsername() { 25 | return username; 26 | } 27 | 28 | public void setUsername(String username) { 29 | this.username = username; 30 | } 31 | 32 | public String getPassword() { 33 | return password; 34 | } 35 | 36 | public void setPassword(String password) { 37 | this.password = password; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Customer.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Customer { 4 | 5 | private String name; 6 | 7 | private Level level; 8 | 9 | public String getName() { 10 | return name; 11 | } 12 | 13 | public void setName(String name) { 14 | this.name = name; 15 | } 16 | 17 | public Level getLevel() { 18 | return level; 19 | } 20 | 21 | public void setLevel(Level level) { 22 | this.level = level; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Data.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Data { 4 | } 5 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/HasBrand.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public interface HasBrand { 4 | 5 | String getBrand(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public interface HelloWorld { 4 | 5 | void sayHello(); 6 | 7 | void sayHello(String name); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/IsMaintenance.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public interface IsMaintenance { 4 | 5 | boolean isMaintenance(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Level.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | import programmer.zaman.now.annotation.Fancy; 4 | 5 | @Fancy(name = "AnimalApp", tags = {"application", "java"}) 6 | public enum Level { 7 | STANDARD("Standard Level"), 8 | PREMIUM("Premium Level"), 9 | VIP("VIP Level"); 10 | 11 | private String description; 12 | 13 | Level(String description){ 14 | this.description = description; 15 | } 16 | 17 | public String getDescription() { 18 | return description; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Location.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public abstract class Location { 4 | 5 | public String name; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/LoginRequest.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public record LoginRequest(String username, String password) { 4 | 5 | public LoginRequest { 6 | System.out.println("Membuat object LoginRequest"); 7 | } 8 | 9 | public LoginRequest(String username) { 10 | this(username, ""); 11 | } 12 | 13 | public LoginRequest() { 14 | this("", ""); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/Product.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class Product { 4 | 5 | public String name; 6 | public int price; 7 | 8 | public Product(String name, int price) { 9 | this.name = name; 10 | this.price = price; 11 | } 12 | 13 | public String toString() { 14 | return "Product name:" + name + ", price:" + price; 15 | } 16 | 17 | @Override 18 | public boolean equals(Object o) { 19 | if (this == o) return true; 20 | if (o == null || getClass() != o.getClass()) return false; 21 | 22 | Product product = (Product) o; 23 | 24 | if (price != product.price) return false; 25 | return name != null ? name.equals(product.name) : product.name == null; 26 | } 27 | 28 | @Override 29 | public int hashCode() { 30 | int result = name != null ? name.hashCode() : 0; 31 | result = 31 * result + price; 32 | return result; 33 | } 34 | 35 | // public boolean equals(Object o) { 36 | // if (o == this) { 37 | // return true; 38 | // } 39 | // 40 | // if (!(o instanceof Product)) { 41 | // return false; 42 | // } 43 | // 44 | // Product product = (Product) o; 45 | // 46 | // if (this.price != product.price) { 47 | // return false; 48 | // } 49 | // 50 | // if (this.name != null) { 51 | // return this.name.equals(product.name); 52 | // } else { 53 | // return product.name == null; 54 | // } 55 | // } 56 | } 57 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/ProductApp.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | public class ProductApp { 4 | public static void main(String[] args) { 5 | 6 | Product product = new Product("Mac Book Pro", 30000000); 7 | 8 | System.out.println(product.name); 9 | System.out.println(product.price); 10 | 11 | System.out.println(product); 12 | 13 | Product product2 = new Product("Mac Book Pro", 30000000); 14 | 15 | System.out.println(product.equals(product2)); 16 | System.out.println(product.hashCode() == product2.hashCode()); 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/data/SocialMedia.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.data; 2 | 3 | class SocialMedia { 4 | String name; 5 | } 6 | 7 | class Facebook extends SocialMedia { 8 | 9 | final void login(String username, String password){ 10 | // isi method 11 | } 12 | 13 | } 14 | 15 | class FakeFacebook extends Facebook { 16 | 17 | // ERROR 18 | // void login(String username, String password){ 19 | // isi method 20 | // } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/error/BlankException.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.error; 2 | 3 | public class BlankException extends RuntimeException { 4 | 5 | public BlankException(String message) { 6 | super(message); 7 | } 8 | 9 | @Override 10 | public String getMessage() { 11 | return super.getMessage(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/error/DatabaseError.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.error; 2 | 3 | public class DatabaseError extends Error { 4 | 5 | public DatabaseError(String message) { 6 | super(message); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/error/ValidationException.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.error; 2 | 3 | public class ValidationException extends Throwable { 4 | 5 | public ValidationException(String message) { 6 | super(message); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/util/MathUtil.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.util; 2 | 3 | public class MathUtil { 4 | 5 | public static int sum(int... values) { 6 | int total = 0; 7 | for (var value : values) { 8 | total += value; 9 | } 10 | return total; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/programmer/zaman/now/util/ValidationUtil.java: -------------------------------------------------------------------------------- 1 | package programmer.zaman.now.util; 2 | 3 | import programmer.zaman.now.annotation.NotBlank; 4 | import programmer.zaman.now.data.LoginRequest; 5 | import programmer.zaman.now.error.BlankException; 6 | import programmer.zaman.now.error.ValidationException; 7 | 8 | import java.lang.reflect.Field; 9 | 10 | public class ValidationUtil { 11 | 12 | public static void validate(LoginRequest loginRequest) throws ValidationException, NullPointerException { 13 | if (loginRequest.username() == null) { 14 | throw new NullPointerException("Username is null"); 15 | } else if (loginRequest.username().isBlank()) { 16 | throw new ValidationException("Username is blank"); 17 | } else if (loginRequest.password() == null) { 18 | throw new NullPointerException("Password is null"); 19 | } else if (loginRequest.password().isBlank()) { 20 | throw new ValidationException("Password is blank"); 21 | } 22 | } 23 | 24 | public static void validateRuntime(LoginRequest loginRequest) { 25 | if (loginRequest.username() == null) { 26 | throw new NullPointerException("Username is null"); 27 | } else if (loginRequest.username().isBlank()) { 28 | throw new BlankException("Username is blank"); 29 | } else if (loginRequest.password() == null) { 30 | throw new NullPointerException("Password is null"); 31 | } else if (loginRequest.password().isBlank()) { 32 | throw new BlankException("Password is blank"); 33 | } 34 | } 35 | 36 | public static void validationReflection(Object object) { 37 | Class aClass = object.getClass(); 38 | Field[] fields = aClass.getDeclaredFields(); 39 | 40 | for (var field : fields) { 41 | field.setAccessible(true); 42 | 43 | if (field.getAnnotation(NotBlank.class) != null) { 44 | // validated 45 | try { 46 | String value = (String) field.get(object); 47 | 48 | if (value == null || value.isBlank()) { 49 | throw new BlankException("Field " + field.getName() + " is blank "); 50 | } 51 | 52 | } catch (IllegalAccessException exception) { 53 | System.out.println("Tidak bisa mengakses field " + field.getName()); 54 | } 55 | } 56 | 57 | } 58 | } 59 | 60 | } 61 | --------------------------------------------------------------------------------