类和对象一(从封装开始讲述)

news2024/11/28 23:49:17

目录:

一.封装 

二.封装扩展之包,自定义包

三.访问限定符  

四.static成员  

一.封装:封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。

下面给一段,用private封装成员变量,的代码:这里用private把他们封装起来,封装后提供,get,set公开接口来给予部分功能访问。

class Student {
    //用private把他们封装起来
    private String name;
    private int age;
    private int id;
    public static String className;
    public void doClass (){

    }

    public Student(String name, int age, int id) {
        this.name = name;
        this.age = age;
        this.id = id;
    }

    //封装后提供,get,set公开接口来给予部分功能访问
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

二.封装扩展之包:

1.在面向对象体系中,提出了一个软件包的概念,即: 为了更好的管理类,把多个类收集在一起成为一组,称为软件 。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件下,也可以对某个文件夹下的音乐进行更详细的分类。 (总之包就是文件夹)。下面可以理解一下
2. Java 中也引入了包, 包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式 ,比如:一 个包中的类不想被其他包中的类使用。包还有一个重要的作用: 在同一个工程中允许存在相同名称的类,只要处在不同的包中即可(可以解决相同名称的类重名)。
3. 可以 使用 import 语句导入包 .
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
如果需要使用 java.util 中的其他类 , 可以使用 import java.util.* 这里 "*" 通配符.  (但是我们更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况.)
import java.util.*;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}

5.可以使用import static导入包中静态的方法和字段。代码如下:

注意事项 : import C++ #include 差别很大 . C++ 必须 #include 来引入其他文件内容 , 但是 Java 不需要。
import 只是为了写代码的时候更方便 . import 更类似于 C++ namespace using

import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 静态导入的方式写起来更方便一些.
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}

二.自定义包:

1.在文件的最上方加上一个 package 语句指定该代码在哪个包中 .
包名需要尽量指定成唯一的名字 , 通常会用公司的域名的颠倒形式 ( 例如 com.bit.demo1 ).

 

2. 先在 IDEA 中先新建一个包 : 右键 src -> 新建 -> 包. 再在 弹出的对话框中输入包名 最后在 包中创建类 , 右键包名 -> 新建 -> , 然后输入类名即可
3.自定义的包可以,自己实例化并且使用

三.访问限定符:

1.Java 中主要通过类和访问权限来实现封装: 类可以将数据以及封装数据的方法结合在一起 ,更符合人类对事物的认
知,而 访问权限用来控制方法或者字段能否直接在类外使用 Java 中提供了四种访问限定符:

 下面给一张逻辑清晰的图:(prtected下次补上)。

1.如果不加上面的访问限定符就是默认权限,默认权限在同一个包中(也就是同一个文件中)可以相互任意进行访问。下面给几个例子:

 2,如果加上public修饰则在不同包(文件夹)里都可以相互使用。

 四.static成员

1.static 修饰的成员变量,称为静态成员变量 ,静态成员变量最大的特性: 不属于某个具体的对象,是所有对象所共 享的 (所修饰的成员变量位于JVM的方法区里)

 2.静态成员变量特性

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生 ( 即:随类的加载而创建,随类的卸载而销毁 )

3.说到加载:源代码储存在磁盘中--》javac编译成字节码文件--》java命令在JVM中运行(这个过程就叫做加载)(这个过程中类不会被重复加载)。

如图:

 4.static修饰成员变量访问可以通过对象的引用访,也可以通过类来访问,这里推荐类来访问

具体代码如下:

class Student {
    //用private把他们封装起来
    private String name;
    private int age;
    private int id;
    public static String className;
    public void doClass (){

    }

    public Student(String name, int age, int id) {
        this.name = name;
        this.age = age;
        this.id = id;
    }

    //封装后提供,get,set公开接口来给予部分功能访问
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void show() {
        System.out.println("姓名" +this.name +  "学号" + this.id +  "年龄"
                + this.age  + " " + "班级" + className);
    }


  public static void main(String[] args) {
        Student student1 = new Student("xiaohua", 12, 23005678);
//        student1.className = "1";

        Student.className = "1班";//学生都属于一班
        student1.show();

        System.out.println(Student.className);

        Student student2 = new Student("xiaohua", 12, 23005678);
//        student1.className = "1";
        student2.show();


        Student student3 = new Student("xiaohua", 12, 23005678);
//        student3.className = "3";
        student3.show();
    }

}

由于被static修饰这里的三个学生都属于同一个班。如图运行结果

 

这里一班是公用的三个学生的中,调试,如图:

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

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

相关文章

插件:Best HTTP

一、简介 WebSocket WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。…

MATLAB 多项式

MATLAB 多项式 MATLAB将多项式表示为行向量,其中包含按幂次降序排列的系数。例如,方程P(x) X 4 7 3 - 5 9可以表示为 p [1 7 0 -5 9]; 求值多项式 polyval函数用于求一个特定值的多项式。例如,在 x 4 时,计算我们之前的多项式…

图论专题训练

leecode 547 并查集 class Solution { public:int findCircleNum(vector<vector<int>>& isConnected) {ini();int len isConnected.size();for(int i0;i<len;i){for(int j0;j<len;j)if(isConnected[i][j]){unio(i,j);}}int ans 0;for(int i0;i<len;…

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…

58. 【Android教程】音频录制:MediaRecord

在第 57 节我们使用 MediaPlayer 实现了一个 mp3 播放器&#xff0c;除了播放 Android 还提供了 MediaRecorder 用于录音。Android 设备基本都会有一个麦克风&#xff0c;通过 MediaRecorder 可以打开麦克风进行语音采集&#xff0c;这一节我们就来学习如何在 Android 系统上实…

Python3 笔记:二进制的转换

十进制是逢十进一&#xff0c;二进制就是逢二进一。 十进制里最大的数字是9&#xff0c;二进制里最大的数字是1。 11010010001000010000010000001000000010^0110^11010^210010^3100010^41000010^510000010^6100000010^7100000002^012^122^242^382^4162^5322^6642^7128 1、十进…

Linux中创建共享文件夹

前言 从0开始记录我的学习历程&#xff0c;我会尽我所能&#xff0c;写出最最大白话的文章&#xff0c;希望能够帮到你&#xff0c;谢谢。 提示&#xff1a;文章作者为初学者&#xff0c;有问题请评论指正&#xff0c;感谢。 当我们再用虚拟机的Linux的时候经常会遇到Windows…

增强客户黏性:服装实体店扫码连锁收银软件提供多样的会员营销策略

随着消费者对购物体验的需求不断提升&#xff0c;服装实体店面临着更大的挑战和机遇。为了增强客户黏性&#xff0c;提升销售业绩&#xff0c;越来越多的服装实体店开始引入扫码连锁收银软件&#xff0c;并提供多样化的会员营销策略。这一举措不仅为店铺提供了更加智能化的经营…

python选修课期末考试复习

目录 记住输出小数的格式文件条件判断随想循环小星星计算金额猜数字折纸 函数找最大值 基础知识总结 记住输出小数的格式 输出a&#xff0c;保留两位小数 %.2f%a打开文件有点儿难&#xff0c;多记几遍格式吧 文件的格式后面有冒号&#xff0c;谨慎一点&#xff0c;都用双引号…

springfox.documentation.spi.DocumentationType没有OAS_30(从swagger2转到swagger3出现的问题)

直接开讲&#xff1a; 查看源码根本没有OAS_30的类型选择 右键package的springfox找到maven下载的包&#xff0c;打开到资源管理器 可以看到项目优先使用2版本的jar包&#xff0c;但是OAS_30只在3版本中才有&#xff0c;意思就是让项目优先使用以下图片中的3.0.0jar包 解决办法…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着&#xff0c;发现很多都是需要收费的&#xff0c;当然如果平时工作需要用的比较多&#xff0c;支持一下还是ok的&#xff0c;但是多数人还是偶尔用一下所以没有必要买。 工作用的话&#xff0c;一般企业文件、个人隐私资料、重要合同...所有重要文…

本地项目上传到gitee

1. 新建仓库&#xff0c;不要勾选 2. git init git add . git commit -m "test" git remote add origin 【url】 git push --set-upstream origin master

js原型链与继承笔记

前置阅读&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain js中的“类”是一个函数。function test() {}中&#xff0c;test是由Function生成的。prototype与__proto__的区别&#xff1a; 前者是js函数&#xff08;C…

Express框架下搭建GraphQL API

需要先下载apollo-server-express&#xff0c;apollo-server-express是Express框架下&#xff0c;用于构建GraphQL服务的中间件&#xff0c;属于Apollo Server的一部分&#xff1a; npm install apollo-server-express 随后在index.js添加 apollo-server-express包&#xff1…

【半个月我拿下了软考证】软件设计师高频考点--系统化教学-关系模式

&#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件设计师考点暴击 ⭐&#x1f170;️进入狂砍分⭐ ⭐软件设计师高频考点文档&#xff0c; ⭐软件设计师高频考点专栏 ⭐软件设计师高频考点⭐ &#x1f3b6;&#xff08;A) 考点1,关系模式 考点&#xff1a; 三个模式相…

Qt自定义控件--提升为

为什么要自定义控件 1&#xff0c;有复合小控件需要组合为一个整体控件时&#xff1b; 2&#xff0c;一个复合控件需要重复使用时&#xff1b; 实现 自定义控件文件 新增三个文件 关联不同组的控件 关联之前的准备工作 1&#xff0c;在主控件选择和子控件所有控件所在控件…

Oracle 流stream数据的复制

Oracle 流stream数据的复制 --实验的目的是捕获scott.emp1表的变化&#xff0c;将变化应用到远程数据库scott.emp1表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 GLOBAL_NAMEStrue JOB_QUEUE_PROCESSES2 --查看数据库的名称&#xff0c;我的为o…

深入解析MySQL中的事务(下)

MySQL事务管理 3. 隔离性&#xff08;Isolation&#xff09;查看和设置隔离级别隔离级别作用域区别与解析 四种隔离级别解析小结 4. 一致性&#xff08;Consistency&#xff09;如何保持一致性 5.“保持原子性、隔离性、持久性就能保证一致性”的理解&#xff1a; 四、如何理解…

25计算机考研院校数据分析 | 中南大学

中南大学&#xff08;Central South University&#xff09;&#xff0c;位于湖南省长沙市&#xff0c;是中华人民共和国教育部直属的全国重点大学 &#xff0c;中央直管副部级建制&#xff0c;位列国家“双一流”、“985工程”、“211工程”&#xff0c;入选国家“2011计划”牵…

BM7 链表中环的入口结点(快慢指针模板题)

描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; &#x1d45b;≤10000n≤10000&#xff0c;1<结点值<100001<结点值<10000 要求&#xff1a;空间复杂度 &…