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

bug郭
+关注
目录
打赏
0
0
0
0
9
分享
相关文章
Java并发包下Atomic相关类的使用
本文介绍了 `java.util.concurrent.atomic` 包下的各类原子类及其使用场景,包括基本类型原子类(如 `AtomicInteger`、`AtomicLong`)、数组类型原子类(如 `AtomicIntegerArray`)、引用类型原子类(如 `AtomicReference`)、对象属性修改原子类(如 `AtomicIntegerFieldUpdater`)以及原子操作增强类(如 `LongAdder` 和 `LongAccumulator`)。同时,详细对比了不同原子类在高并发场景下的性能表现,展示了 `LongAdder` 的高效性。
91 31
|
2月前
|
深入JavaSE:详解Java对象的比较。
总的来说,Java对象的比较就像海洋生物的比较,有外在的,有内在的,有面对所有情况的,也有针对特殊情况的。理解并掌握这些比较方式,就能更好地驾驭Java的世界,游刃有余地操作Java对象。
58 12
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
111 23
|
2月前
|
【高薪程序员必看】万字长文拆解Java并发编程!(7):不可变类设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中Java不可变类设计指南,废话不多说让我们直接开始。
43 0
Java 类和对象
本文介绍了Java编程中类和对象的基础知识,作为面向对象编程(OOP)的核心概念。类是对象的蓝图,定义实体类型;对象是具体实例,包含状态和行为。通过示例展示了如何创建表示汽车的类及其实例,并说明了构造函数、字段和方法的作用。同时,文章还探讨了访问修饰符的使用,强调封装的重要性,如通过getter和setter控制字段访问。最后总结了类与对象的关系及其在Java中的应用,并建议进一步学习继承等概念。
|
3月前
|
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
150 0
|
3月前
|
java中一个接口A,以及一个实现它的类B,一个A类型的引用对象作为一个方法的参数,这个参数的类型可以是B的类型吗?
本文探讨了面向对象编程中接口与实现类的关系,以及里氏替换原则(LSP)的应用。通过示例代码展示了如何利用多态性将实现类的对象传递给接口类型的参数,满足LSP的要求。LSP确保子类能无缝替换父类或接口,不改变程序行为。接口定义了行为规范,实现类遵循此规范,从而保证了多态性和代码的可维护性。总结来说,接口与实现类的关系天然符合LSP,体现了多态性的核心思想。
80 0
java常见的集合类有哪些
Map接口和Collection接口是所有集合框架的父接口: 1. Collection接口的子接口包括:Set接口和List接口 2. Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及 Properties等 3. Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 4. List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
|
5月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
294 60
【Java并发】【线程池】带你从0-1入门线程池

热门文章

最新文章

AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等