java面向对象编程——类和对象(2)

简介: java面向对象编程——类和对象(2)

封装

private关键字实现封装
private关键字修饰成员变量
//private修饰的成员访问权限在类中
class People{
    private String name;   //private修饰成员变量,实现封装
    private String sex;   //private修饰 sex 和 name成员属性的访问权限只能在类中
}
public class Test{
    public static void main(String[] args) {
        People people = new People();
        people.name; //error 被private不能在类外访问
    }
}

image.png

可能你会奇怪,private修饰的成员确实实现了封装,类外都访问不到,那我们要实现类外访问呢?


getter和setter方法

我们是否想过,虽然我们的成员变量被private修饰了,无法在类外访问,我们可以通过其他方法接口,间接实现对private变量的访问。

getter方法


class People{
    private String name;   //private修饰成员变量,实现封装
    private String sex;   //private修饰 sex 和 name成员属性的访问权限只能在类中
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
}
public class Test{
    public static void main(String[] args) {
        People people = new People();
        //people.name; //error 被private不能在类外访问
        //通过getter方法对private属性实现间接访问
        System.out.println("name:"+people.getName());
        System.out.println("sex:"+people.getSex());
    }
}

image.png

setter方法

我们可以通过在类中创建setter方法接口将private私有属性修改!达到在类外间接访问私有属性的目的!


class People{
    private String name;   //private修饰成员变量,实现封装
    private String sex;   //private修饰 sex 和 name成员属性的访问权限只能在类中
      //setter方法,可以在类外传参,在类中将私有属性修改
    public void setName(String name) {
        this.name = name;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
}
public class Test{
    public static void main(String[] args) {
        People people = new People();
        //通过setter方法设置私有属性
        people.setName("bug郭");
        people.setSex("男");
        //通过getter方法对private属性实现间接访问
        System.out.println("name:"+people.getName());
        System.out.println("sex:"+people.getSex());
    }
}

image.png

getter和setter快捷方式

在IDEA下,编译器提供了setter和getter方法的快捷方式

1.鼠标右键

image.png

2.点击Generate

image.png

我们可以选择我们要进行的操作,setter方法,getter方法或者toString方法 ,都可以一键生成!


我们也可以直接快捷键,Alt + Insert


代码块

使用{} 定义的一段代码。


根据代码块定义的位置以及关键字,又可分为以下四种:


普通代码块

定义在方法中的代码块!

class Animal{
    String name;
    int age;
    public void speak(){
       //普通代码块,在方法中
       {
        System.out.println("haha");
      }
    }
}

构造块

构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

class Animal{
    String name;
    int age;
    //构造块
    {
        System.out.println("构造方法");
    }
}

在new一个对象时,构造块比构造构造方法先执行!


class Animal{
    String name;
    int age;
    public Animal(){
        System.out.println("构造方法");
    }
    //构造块
    {
        System.out.println("构造块");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
    }
}

image.png


静态块

静态块:由static定义的代码块!一般用于初始化静态属性!

class Animal{
    static String name;
    //静态代码块
    static {
        name = "bug郭";
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println(Animal.name);
    }
}

image.png


new一个对象时,构造方法,构造块,静态代码块三者的优先级!

class Animal{
    static String name;
    //构造块
    {
        System.out.println("构造块");
    }
    //构造方法
    public Animal(){
        System.out.println("构造方法");
    }
    //静态代码块
    static {
        System.out.println("静态代码块");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println("=========");
        Animal animal2 = new Animal();//静态代码块是否还会执行???
    }
}

image.png

注意事项:

1.静态代码块只执行一次!

2.三者执行优先顺序:

静态代码块,构造块,构造方法


同步代码块

bug郭尚未学习到,就不做介绍!

toString方法


image.png

image.png

既然是父类中的方法我们就可以在子类中重写父类方法!

我们可以通过刚刚我们学习setter和getter快捷方式直接进行重写!

image.png

image.png

重写toString方法可以返回属性名和属性值!重写后使我们打印一个对象的属性值更快捷方便!

这就是java中类和对象所有的内容!如有遗漏,还望指出!

目录
相关文章
|
5天前
|
Java
【Java】Math、System、RunTime、BigDecimal类常用方法
【Java】Math、System、RunTime、BigDecimal类常用方法
|
3天前
|
安全 Java API
16 个最常用的 Java 实用程序类
【8月更文挑战第16天】
10 1
16 个最常用的 Java 实用程序类
|
4天前
|
缓存 前端开发 Java
【前端学java】复习巩固-Java中的对象比较(15)
【8月更文挑战第11天】Java中的对象比较
13 1
【前端学java】复习巩固-Java中的对象比较(15)
|
1天前
|
SQL Java Apache
实时计算 Flink版操作报错合集之使用parquet时,怎么解决报错:无法访问到java.uti.Arrays$ArrayList类的私有字段
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3天前
|
Java API 开发者
|
4天前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
5天前
|
设计模式 人工智能 Java
Java 如何使用单例类
Java 如何使用单例类
5 1
|
2天前
|
存储 设计模式 Java
在 Java 中创建多个对象
【8月更文挑战第17天】
6 0
|
4天前
|
Java Spring 容器
Java SpringBoot 中,动态执行 bean 对象中的方法
Java SpringBoot 中,动态执行 bean 对象中的方法
13 0
|
4天前
|
Java
Java Bean 注册对象
Java Bean 注册对象
5 0