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中类和对象所有的内容!如有遗漏,还望指出!

目录
相关文章
|
7月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
959 157
|
8月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
452 101
|
8月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
358 100
|
7月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
323 4
|
7月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
354 5
|
7月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
442 5
|
7月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
387 1
|
7月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
493 1
|
7月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
312 1
|
7月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
361 1