Java:类和对象(2)

news2024/9/23 11:20:36

一 对象的构建和初始化

1.对象构建 (Object Construction)

Student student1=new Student("zhangsan",12,"123456");
Student student2=new Student("lisi",10,"15236");

2. 构造函数(Constructor)

构造函数的特性:

  • 名字与类名相同。
  • 没有返回类型。
  • 可以重载(多个构造函数可以具有不同的参数列表)。
2.1有参数构造方法 
 public Student(String name,int age,String stuNum){
        this.name=name;
        this.age=age;
        this.stuNum=stuNum;
        System.out.println("带有三个参数的构造方法");
    }
2.2无参数构造方法
 public Student(){
        this.name="lisi";
        this.age=18;
        this.stuNum="123456";
        System.out.println("无参数的构造方法");
    }

3. 对象初始化 (Object Initialization)

3.1在声明字段时赋值
public class Student {
    String name = "lisi";
    int age = 20;
    String num="123456"
}
3.2构造代码块处赋值 (Initialization Block) 

静态代码块

 static {
        //定义在类当中,方法的外面,一般用于初始化静态成员的初始值
        classNum="114";
        System.out.println("静态代码块一般用来初始化静态成员变量");
    }

实例代码块 

{
        this.name="pig";
        System.out.println("实例代码块");
    }

注:

Java 对象的构建和初始化主要通过 new 操作符、构造函数、字段初始化、构造代码块以及静态代码块来完成。每个对象的生命周期从构造开始,直到被垃圾回收器销毁。

二 封装

在 Java SE 中,封装(Encapsulation) 是面向对象编程(OOP)中的一种核心概念。封装的目的是将对象的状态(字段/属性)隐藏起来,并通过公开的方法(访问器、修改器)来访问和修改这些属性。这种机制能够保护对象的内部状态不被随意修改,增强代码的安全性和可维护性。 

1.封装的基本原则

  1. 将字段声明为 private,防止外部直接访问。
  2. 提供 public 的 getter 和 setter 方法,用于控制对私有字段的访问和修改。
  3. 通过 setter 方法可以添加业务逻辑来限制对属性的修改,而不是直接操作属性。

2.封装的优点

  • 数据隐藏:外部类无法直接访问对象的内部数据。
  • 控制访问:可以在 getter 和 setter 中增加逻辑,控制数据的访问权限。
  • 灵活性:可以根据需要修改内部实现,而不影响使用该类的其他代码。
  • 提高可维护性:减少错误发生的机会,并使代码更易维护。
public class Student {
    private String name="wangda";
    private int age;
    private double score;
    private static String classNum="1班";

利用getter 和 setter 方法,用于控制对私有字段的访问和修改 

public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public static String getClassNum() {
        return classNum;
    }

    public static void setClassNum(String classNum) {
        Student.classNum = classNum;
    }

3.对封装的使用

 public static void main1(String[] args) {
        Student student1=new Student("zhangsan",12,"123456");
        Student student2=new Student("lisi",10,"15236");
        student1.setName("zhangsan");
        System.out.println(student1.getName());
        student1.setAge(12);
        System.out.println(student1.getAge());
        student1.setStuNum("123456");
        System.out.println(student1.getStuNum());
        student2.setName("lisi");
        System.out.println(student2.getName());
        student2.setAge(10);
        System.out.println(student2.getAge());
        student2.setStuNum("15236");
        System.out.println(student2.getStuNum());

    }

4.访问修饰符及他们的权限

 

5. 封装的好处

  • 增强代码的安全性:通过限制直接访问对象的属性,可以防止外部代码对对象进行不合法的操作。
  • 维护性和可扩展性:封装让我们可以轻松修改类的内部实现,而不影响使用该类的其他代码。
  • 保护不变性:在 setter 方法中可以添加数据验证,确保对象始终处于有效状态。

注:封装是 Java 面向对象编程中的重要原则之一,通过将类的字段设为 private 并提供 public 的 getter 和 setter 方法,可以确保对象的状态只能通过受控的方式进行访问和修改。封装使代码更加安全、易于维护,并且更容易扩展。 

default属性:只能被本包中类访问 。

public属性: 可以任何其他类访问。

private属性:只能在类中访问,不能被其他类访问 

三 包(Package)

在 Java SE 中,包(Package) 是一种用于组织类和接口的机制。包提供了一种层次化的结构,以便更好地管理代码,并避免类名冲突。Java 中的每个类都属于某个包,未显式声明包的类属于默认包。 

1.包的概念

包在 Java 中的作用类似于文件夹,提供了一种分类和管理类、接口的方式。通过包,开发者可以对项目中的类进行分组,使代码更加结构化。

2.包的作用

  • 避免类名冲突:不同开发者可以创建相同名称的类,但通过包来区分它们,避免名称冲突。
  • 访问控制:包提供了额外的访问权限控制,不同包中的类之间的访问权限可以通过访问修饰符进行控制。
  • 提高代码的可维护性:将类按功能分组可以使代码更加易读和易于维护。
  • 方便类的查找和使用:通过包的层次结构,可以快速定位和使用类。

3.包的创建

package com.b.www;

public class TEST2 {

}

在上面的例子中,TEST2类属于 com.b.www包。package 声明必须是源文件中的第一条语句,除非有 package 之前的注释或许可声明。 

4.包的命名规则

Java 包的命名通常使用公司或组织的互联网域名的反向写法作为包名的一部分,例如:

  • com.companyname.projectname:公司名和项目名作为包的前缀。
  • org.organizationname.product:使用组织名和产品名。

这有助于确保包名的全局唯一性。包名中的每个部分都必须是有效的 Java 标识符,通常采用小写字母。

5.包的导入

5.1导入单个类
import java.util.Arrays;
import java.util.Date;
5.2导入整个包 
import java.util.*;
import java.util.*;

四 static(静态的) 

在 Java SE 中,static 关键字用于声明类的成员(属性和方法)为静态的,即这些成员属于类本身,而不是类的实例(对象)。这意味着静态成员在类的所有实例之间共享,不依赖于具体对象进行调用。

1. 静态变量 (Static Variables)

  private static String classNum="1班";

特点

  • 静态变量在所有对象间共享。
  • 无需通过对象,静态变量可以通过类名直接访问
  • 静态变量在类加载时初始化,并在类的整个生命周期内保持。
   public static void main2(String[] args) {
        //都可以表示静态成员的打印
        System.out.println(Student.classNum);
        System.out.println(Student.getClassNum());

2.静态变量的 getter 和 setter 方法

public static String getClassNum() {
        return classNum;
    }

    public static void setClassNum(String classNum) {
        Student.classNum = classNum;
    }

3.静态方法(Static Methods)

public static int add(int a,int b){
        return a+b;
    }

4.静态代码块

static {
        //定义在类当中,方法的外面,一般用于初始化静态成员的初始值
        classNum="114";
        System.out.println("静态代码块一般用来初始化静态成员变量");
    }

五 对象的打印

public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

public static void main(String[] args) {
        Student student=new Student("lis",12,13);
        System.out.println(student);
        System.out.println(student.toString());
    }

 打印结果:

希望能对大家有所帮助!!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android binder 机制驱动核心源码详解_binder_thread_read

binder 驱动中做的工作可以总结为以下几步: 准备数据,根据命令分发给具体的方法去处理找到目标进程的相关信息将数据一次拷贝到目标进程所映射的物理内存块记录待处理的任务,唤醒目标线程调用线程进入休眠目标进程直接拿到数据进行处理&…

maven安装依赖

这里以安装tomcat依赖为例 1, 访问maven公共仓库 2,搜索tomcat 3, 右侧点击Plugin 选择&#xff1a;Apache Tomcat Maven Plugin :: Tomcat 7.x 选择版本&#xff0c;这里我选择2.2 选择maven&#xff0c;将<dependency>中的内容copy到pom.xml中的<build>里面 …

webctf

熟悉robots.txt协议&#xff0c;可能存在一些敏感信息(sql在登录时候的万能密码a’ or true#)熟悉phps文件&#xff0c;phps文件就是 php 的源代码文件&#xff0c;通常用于提供给用户&#xff08;访问者&#xff09;查看 php 代码&#xff0c;因为用户无法直接通过 Web 浏览器…

力扣279-完全平方数(Java详细题解)

题目链接&#xff1a;279. 完全平方数 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包&#xff0c;所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&…

测试阶段例题

答案&#xff1a;D 测试阶段划分 单元测试 模块测试&#xff0c;模块功能&#xff0c;性能&#xff0c;接口等 集成测试 模块间的接口 系统测试 真实环境下&#xff0c;验证完整的软件配置能否和系统正确连接 确认测试 验证软件与需求的一致性。内部确认测试&#xff0…

k8s独立组件ingress,七层转发

一、K8S的Service 1、Service的作用 Service的作用体现在两个方面&#xff1a; 1、集群内部&#xff1a;不断跟踪pod的变化&#xff0c;更新endpoints中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制&#xff0c;也可以实现负载均衡&#xff0c;四层代理…

vue element时间选择不能超过今天 时间选中长度不能超过7天

背景&#xff1a; 使用elenmet plus 组件实现时间选择&#xff1b;且日期时间选择不能超过今天&#xff1b;连续选中时间的长度范围不能超过7天 效果展示&#xff1a; 实现思路&#xff1a; 一、使用element组件自带的属性和方法&#xff1b; :disabled-date"disabledDate…

misc音频隐写

一、MP3隐写 &#xff08;1&#xff09;题解&#xff1a;下载附件之后是一个mp3的音频文件&#xff1b;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密&#xff1b;mp3stego工具是音频数据分析与隐写工具 &#xff08;2)mp3stego工具的使用&#xff1a;…

QT 绘制简易时钟

原文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->startTimer(1000); }Widget::~Widget() {delete ui; }//时钟底座 void Widget::paintEvent(Q…

景联文科技:专业扫地机器人数据采集标注服务

景联文科技作为一家专业AI数据采集标注公司&#xff0c;提供高质量数据支持&#xff0c;致力于帮助扫地机器人制造商和研发机构提升产品的智能水平和用户体验。 扫地机器人需要通过大量的环境数据来训练其导航和清洁算法。高质量标注数据是确保机器人在各种环境下高效工作的关键…

二百六十三、Java——IDEA项目打成jar包,然后在Linux中运行

一、目的 在用Java对原Kafka的JSON字段解析成一条条数据&#xff0c;然后写入另一个Kafka中&#xff0c;代码写完后打成jar包&#xff0c;放在Linux中&#xff0c;直接用海豚调度运行 二、Java利用fastjson解析复杂嵌套json字符串 这一块主要是参考了这个文档&#xff0c;然…

vite+vue3快速构建项目+router、vuex、scss安装

安装 Vite npm install -g create-vite-app创建vue3项目 npm init vitelatestnpm i安装依赖 安装veux、router npm install vue-router vuex新建router/index.js&#xff08;自己创建home、login对应页面文件&#xff09; import { createRouter, createWebHistory } from…

针对SVM算法初步研究

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;心态决定高度&#xff0c;细节决定成败…

Linux系统:mkdir命令

1、命令详解&#xff1a; mkdir命令是用来创建目录的&#xff0c;是make directory的缩写。 2、语法&#xff1a; mkdir [选项] 目录名 3、官方参数&#xff1a; 选项&#xff1a;-m, --modeMODE 设置新创建目录或文件的权限模式-p, --parents 创建多级目…

SEO之页面优化(一-页面标题)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客&#xff1a;阿幸SEO~探索搜索排名之道 现在讨论页面本身可以优化…

基于zabbix实现监控Jenkins过程---超详细

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【Lua学习】Lua最最基础的

Lua是什么&#xff1f; Lua是一种强大、高效、轻量级、可嵌入的脚本语言。它支持过程式编程、面向对象编程、函数式编程、数据驱动编程和数据描述。 Lua将简单的过程式语法与基于关联数组和可扩展语义的强大数据描述构造相结合。Lua是动态类型的&#xff0c;通过基于寄存器的虚…

C++ IO流全解析:标准库中的数据处理与文件读写艺术

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 一&#xff1a; &#x1f525; C语言的输入与输出 二&#xff1a; &#x1f525; 流是什么 三&#xff1a; &#x1f525; CIO流&#x1f680; 3.1 C标准IO流&#x1f680; ist…

<<编码>> 第 10 章 逻辑与开关(Logic and Switches) 示例电路

串联电路 info::操作说明 鼠标单击开关切换开合状态 需要两个开关同时闭合才能接通电路 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch10-01-series-circuit.txt 并联电路 in…

windows下 MySQL8.4.2 LTS 解压版的安装使用

目录 一、下载二、解压三、创建 my.ini 文件四、安装 一、下载 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 二、解压 将下载包解压到 D 盘&#xff1a; 三、创建 my.ini 文件 D:\mysql-8.4.2-winx64 目录下创建 my.ini 文件&#xff1a; [mysql] # …