对象创建与引用

知识点:对象的创建与使用、对象的引用传递、访问控制权限

一、对象的创建与使用

1.1 创建对象

Java 中使用 new 关键字创建对象。

格式:

复制代码
类名 对象名 = new 类名();

示例:

复制代码
public class Student {
    String name;
    int age;

    public void introduce() {
        System.out.println("我叫" + name + ",今年" + age + "岁");
    }
}

public class TestStudent {
    public static void main(String[] args) {
        // 创建对象
        Student s1 = new Student();
    }
}

1.2 给属性赋值

使用 . 访问对象属性。

格式:

复制代码
对象名.属性名 = 值;

示例:

复制代码
s1.name = "张三";
s1.age = 18;

1.3 调用对象方法

格式:

复制代码
对象名.方法名();

示例:

复制代码
s1.introduce();

1.4 完整示例

复制代码
public class Student {
    String name;
    int age;

    public void introduce() {
        System.out.println("我叫" + name + ",今年" + age + "岁");
    }
}

public class TestStudent {
    public static void main(String[]  args) {
        Student s1 = new Student();

        s1.name = "张三";
        s1.age = 18;
        s1.introduce();
    }
}

输出:

复制代码
我叫张三,今年18岁

二、对象的引用传递

2.1 引用类型的理解

Java 中,类、数组、接口等都是引用类型。

用类创建出来的对象变量,保存的不是对象本身,而是对象的地址 / 引用。

复制代码
Student s1 = new Student();

可以简单理解为:

  • new Student():在堆内存中创建对象;
  • s1:保存对象的地址,通过地址找到对象。

2.2 引用传递示例

复制代码
public class Student {
    String name;
    int age;
}

public class TestReference {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.name = "张三";
        s1.age = 18;

        Student s2 = s1;
        s2.name = "李四";

        System.out.println(s1.name); // 李四
    }
}

输出结果:

复制代码
李四

原因:s2 = s1 把引用地址复制给了 s2,两个变量指向同一对象。

2.3 方法中的引用传递

复制代码
public class Student {
    String name;
    int age;
}

public class TestReference2 {
    public static void main(String[] args) {
        Student s = new Student();
        s.name = "王五";

        changeName(s);
        System.out(s.name); // 赵六
    }

    public static void changeName(Student stu) {
        stu.name = "赵六";
    }
}

注意:引用传递中,方法改变的是对象属性,不是外部变量本身的地址。


三、访问控制权限

Java 提供访问修饰符来控制类、属性和方法的访问权限。

3.1 四种权限

权限 含义 说明
public 公共的 任何地方都能访问
protected 受保护的 同包、子类可以访问
不写 / 空 包访问权限 同包可以访问
private 私有的 只能在本类内部访问

3.2 权限从小到大

复制代码
private < 不写 < protected < public

3.3 示例

复制代码
public class Student {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public class TestPermission {
    public static void main(String[] args) {
        Student s = new Student();

        s.setName("张三");
        System.out.println(s.getName());

        // s.name = "李四"; // 错误:private不能直接访问
    }
}

3.4 类、属性、方法使用权限的建议

成员 建议权限 理由
类 public 方便其他类使用
属性 private 封装数据,避免直接修改
方法 public 对外提供功能入口

本章小结

  1. 对象创建 :new 类名() 创建对象,用 . 访问属性和方法。
  2. 引用传递:对象变量保存地址,多个引用可指向同一对象。
  3. 访问权限 :private、包访问、protected、public,权限从小到大。
  4. 封装常用写法 :属性 private,对外提供 getXxx() 和 setXxx()。
相关推荐
Flynn Liang21 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪1 天前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息1 天前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼1 天前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff1 天前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff1 天前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
David猪大卫1 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
SL_staff1 天前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品
nice_lcj5201 天前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
fengci.1 天前
CTF2MISC中等部分
开发语言·前端·学习