广告
返回顶部
首页 > 资讯 > 后端开发 > Python >带你了解Java的类和对象
  • 831
分享到

带你了解Java的类和对象

2024-04-02 19:04:59 831人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录五丶封装(1)包的概念与创建1>概念2>创建(2)包的使用–导入包(3)封装定义–权限控制访问(4)补充些常用的包(小拓展)六丶关于static成员(1)修饰成员变量

五丶封装

(1)包的概念与创建

1>概念

在我们的电脑上有许多的文件,我们为了方便管理,大致给它们进行了不同的命名。

在这里插入图片描述

然后在不同的文件夹下面再给它们进行了具体的划分,比如我自己的音乐里面对于音乐人的划分:许嵩,周杰伦,薛之谦…

在这里插入图片描述

然后每个人对应的文件夹下面就是他们自己的歌。

在JAVA中,对于项目的管理也是一样的道理。

JAVA中我们有不同的项目,就像我们对于自己电脑文件的大致分类:音乐项目,视频项目,桌面项目等。

在不同的项目底下,我们又有了不同的划分----包,就相当于我们在音乐大文件夹下对歌手进行了划分:周杰伦包,许嵩包,薛之谦包。

在不同的包下,我们又有了区分—类,比如许嵩包里:《断桥残雪》类,《多余的妹妹》类,《天龙八部之宿敌》类等等。

具体图示如下:

在这里插入图片描述

那么,接着给出具体定义:

多个类收集在一起成为一组,称为软件包

2>创建

那么接下来我们创建一个包,打开idea,右键src --> new --> package

在这里插入图片描述

然后对于接下来弹出一下窗口,我们给这个包命名为TestPackage

在这里插入图片描述

(2)包的使用–导入包

平常的代码中,我们能遇到很多要求,比如要求我们求一个数的平方根,比如我们要得到一个时间,或者我们需要用到数组排序等等等等,但是像这些东西JAVA中已经有了具体的类来帮助我们实现。

这里我举一个例子,比如我们要得到一个时间,可以使用 java.util.Date 导入 java.util 这个包中的Date类,但是怎么导入呢?这里提供三种方法;

1.对象创建之初进行导入


public class TestPackage {
    public static void main(String[] args) {
        java.util.Date d1 = new java.util.Date();//看这里
        System.out.println(d1.getTime());
    }

优点:精确程度很高,很大程度避免冲突。

缺点:无疑很大程度的增加了代码的复杂程度,所以不推荐

2.在代码开头使用import java.util.*(意味着使用util这个包下所有的类)


import java.util.*;  //看这里
public class TestPackage {
    public static void main(String[] args) {
        Date d1 = new Date();
        System.out.println(d1.getTime());
    }
}

优点:使用及其方便

缺点:可能会产生冲突,如下图:

在这里插入图片描述

此时无法分辨这个Date类是util下的类还是sql下的类,那么怎样解决呢?也很简单,将这个*换成指定的类就好,并且支持此类情况导入

在这里插入图片描述

3.静态导入(前面加static)


import static java.lang.Math.*;
public class TestPackage {
    public static void main(String[] args) {
        System.out.println(sqrt(100));
        System.out.println(max(1,2));
    }
}

(3)封装定义–权限控制访问

有了前面两个的基础,那么就有一个问题我们需要考虑一下,如果一个类提供了模板,那么能在另外一个类中创建对应的对象

并且访问这个类的一些属性嘛?我们怎样知道它能不能创建并且访问呢?先给第二个答案的模板:

在这里插入图片描述

看一个类以及它的属性和方法能不能被其他类访问或者使用那么就要看它的权限修饰符了,如果修饰符给的权限允许,那么当然可以访问。我们在同一个包下创建Student类和Stedent的测试类,进行对应的测试:

在这里插入图片描述

在这里插入图片描述

可以看到,当权限修饰符不同时,能否被访问的情况也截然不同,其中private修饰符修饰的变量不仅不能被IDEA提示出来,如果强行打印还会报错。 这就是一种封装!

在这里插入图片描述

下面给出封装的具体定义:

一个对象隐藏自己的部分属性和实现细节,对于内部数据的访问只能通过对外公开的接口,通过这种方式,对象对于内部数据提供了不同级别的保护,以防止部分无关意外的改变或错误的使用了内部数据。

(4)补充些常用的包(小拓展)

  1. java.lang:系统常用基础类(String、Object),此包从jdk1.1后自动导入。
  2. java.lang.reflect:java 反射编程包;
  3. java.net:进行网络编程开发包。
  4. java.sql:进行数据库开发的支持包。
  5. java.util:是java提供的工具程序包。(集合类等)
  6. 非常重要java.io:I/O编程开发包。

六丶关于static成员

在Student这个学生类中,我们创建每一个学生对象都有自己对应的姓名,年龄,性别。

在这里插入图片描述

当这些学生在一个同一个教室上课。如果我们想知道这些学生在哪里上课,那么我们能怎么办呢?

创建一个对应的成员变量然后进行打印嘛?好像不行,因为这个教室是公有的,不是私有的,不属于某个具体的对象,而是属于整体。在Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享。

那么接下来,就给出static关键字的解释:

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。

(1)修饰成员变量–区分成员丶静态成员变量

Java的类中,不被static修饰的叫成员变量,被static修饰的叫做静态成员变量。

1> 成员变量因为是对于类的对象的描述,是类的对象实例化的体现,所以成员变量也叫实例变量。而静态成员变量是对于类的描述,它是属于类的,所以静态成员变量也叫类变量

2> 成员变量与对象共存亡,他随着对象的创建而存在,随着对象被回收而销毁。类变量与类共存亡,随着类的加载而存在,随着类的消失而消失。

3>成员变量存储在堆当中,而静态变量比较特殊,在JDK8之前,永久代没有取消的时候它是存在于方法区当中,但是JDK8以后(含)它也存在于堆当中

4>成员变量属于对象,所以成员变量只能被对象调用。而类变量属于类,但是对象也属于类,所以类变量既可以被类名调用也可以被对象调用。

接着看下面的代码,证明一下上面关于类变量的结论:

在这里插入图片描述

注意看红字!!!!!

(2)修饰成员方法–调用私有变量

Java的类中,不被static修饰的叫成员方法,被static修饰的叫做静态成员方法。
.

1>成员方法是对象功能的体现,它是属于对象的,所以只能被对象调用,而静态成员变量是属于类的,是类的功能体现,所以它可以被类名调用,也可以被对象调用

2> 静态方法没有隐藏的this引用参数(重点)

针对这个第二点,我们需要进行详细的探讨。

首先是对于非静态方法调用静态方法,最平常的调用:

在这里插入图片描述

再接着对于静态方法对于非静态方法的调用:

在这里插入图片描述

因为静态方法没有隐藏的this引用参数,所以不可以在没有创建对象的前提下,访问任何非静态成员变量或者方法。

(3)访问私有属性

当一个类的成员方法设置为私有的时候,那么外面的类如果想要进行访问要怎样访问呢?具体措施如下:

在这里插入图片描述

在这里插入图片描述

我们增加一个成员方法,然后通过这个成员方法来访问私有成员变量。那么怎样访问这个成员方法呢?只有以这个类为模板创建一个对象,然后通过对象访问。

那如果我就想用类名直接点呢?该怎么做?那我们应该加static

在这里插入图片描述

在这里插入图片描述

问题一:为什么要给私有成员变量加static?

回答:因为成员变量只能通过对象来访问,他是属于对象的,所以如果不给私有成员变量加static的话,那么创建对象这一关无论如何过不去

问题二:为什么要给那个访问私有变量的成员方法加static

回答:因为那个只有对象才能访问成员方法,而如果是静态方法的话,那么就可以直接通过类名来调用了。

七丶代码块

PS:在正式写下代码块之前,有一个需要注意的点想在这里给各位读者们提一下,对于静态成员变量的初始化,除了一开始的就地初始化,我们还能怎样初始化呢?没错,就是通过代码块。

那么,何为代码块呢?
所谓代码块,就是使用 { } 定义的一段代码,根据其定义的位置以及关键字,又可以分为一下四种。

(1)普通代码块

定义在方法中的代码块


public class Persion {
    public static void main(String[] args) {
        {
            int a = 10;
            System.out.println(a);
        }
        int a = 100;
        System.out.println(a);
    }
}

//运行结果:
a = 10;
a = 100;

(2)构造代码块

在类当中的代码块,不加修饰符,一般用于初始化成员变量,也叫实例代码块

问:既然这个构造代码块也是来初始化成员变量的,那么他和构造器有什么关联呢?
我们继续往下走。

在这里插入图片描述

可以发现,构造代码块优先于构造方法执行,接下来我们打开它的class文件。

在这里插入图片描述

可以看到,编译器在编译完成的时候,把构造代码块中的内容放在了构造方法的第一条语句之前。

(3)静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

在这里插入图片描述

在这里插入图片描述

从这里,我们可以看出

(1)静态代码块在类加载的时候才会执行一次,与生成对象数无关
(2)实例代码块只有在创建对象时才会执行。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 带你了解Java的类和对象

本文链接: https://www.lsjlt.com/news/135416.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 带你了解Java的类和对象
    目录五丶封装(1)包的概念与创建1>概念2>创建(2)包的使用–导入包(3)封装定义–权限控制访问(4)补充些常用的包(小拓展)六丶关于static成员(1)修饰成员变量...
    99+
    2022-11-12
  • 手把手带你粗略了解Java--类和对象
    目录认识类和对象1.类、对象是什么?2.什么是面向对象?3.一个对象的产生过程是?🔺OOP语言的三大特征?类和对象的实例化类的定义:注意:实例化对象:①如何访问对象中...
    99+
    2022-11-12
  • 带你快速了解Java中类和对象的关系
    本文重点解读Java里的类和对象的关系 1、首先介绍两个概念 类:类是对现实生活中一类具有共同属性和行为事务的抽象,确定对象将会拥有的属性和行为。 对象:对象是类的一个实例(对象不...
    99+
    2022-11-12
  • 一篇文章带你深入了解Java对象与Java类
    目录1.面向对象是什么?2.Java类1.什么是类2.Java类类的结构Java类的格式3.java对象4.类和对象5.类中的变量,方法1.变量分类成员变量:局部变量:2.方...
    99+
    2022-11-12
  • 带你入门Java的类与对象
    目录类和对象类的属性成员方法形参和实参局部变量可变参数构造方法this关键字this.属性名this.方法名this( )访问构造方法static关键字静态变量1)静态变量2)实例变...
    99+
    2022-11-12
  • 带你用Java全面剖析类和对象
    目录一、面向过程?面向对象?二、类和类的实例化2.1普通成员变量和普通成员方法2.2静态成员变量和静态成员方法三、封装3.1private3.2getter和setter四、构造方法...
    99+
    2022-11-12
  • 一篇文章带你了解JAVA面对对象应用
    目录常用APIString类关于String为啥不可改变StringBuilder类String、StringBuffer 和 StringBuilder 的区别:ArrayList...
    99+
    2022-11-12
  • JavaSE的类和对象你真的了解吗
    目录1.基本概念1.1面向对象1.2类和对象2.类的定义及使用2.1定义2.2类的实例化3.this引用3.1访问成员变量3.2访问成员方法3.3this引用的特性4.构造方法4.1...
    99+
    2022-11-13
  • 一篇文章带你了解JavaScript-对象
    目录创建对象对象直接量通过new创建对象原型Object.create()属性的查询和设置继承属性访问错误删除属性检测属性序列化对象总结创建对象 对象直接量 对象直接量是由若干名/值...
    99+
    2022-11-12
  • JavaScript的对象和包装类你了解多少
    目录一、对象1.1 描述对象1.2 属性的增删改查(以下需要在控制台输入)1.3 对象的创建方法1.3.1 字面量1.3.2 构造函数1.3.3 Object.create(原型)方...
    99+
    2022-11-13
  • 带你了解Java常用类小结
    目录Java常用类包装类包装类中的常量包装类的构造方法包装类中的常用方法Math类枚举枚举定义枚举的常见方法总结Java常用类 包装类 由于Java语言中的基本类型不是面向对象,并不...
    99+
    2022-11-12
  • Java中的抽象类和接口你了解吗
    目录抽象类什么是抽象类?抽象类属于什么类型?抽象类怎么定义?抽象类是干什么的?什么是抽象方法?非抽象类继承抽象类抽象类总结接口接口的基础语法接口的实现接口和多态联合使用继承和实现同时...
    99+
    2022-11-13
  • 一文带你全面了解Java Properties类
    目录概述介绍构造方法关键方法使用案例源码解析总结概述 Properties是JDK1.0中引入的java类,目前也在项目中大量使用,主要用来读取外部的配置,那除了这个,你对它其他的一...
    99+
    2022-11-13
  • 一篇文章带你了解JAVA面对对象三大特征之封装
    目录面对对象的三大特征: 封装、继承、多态封装继承多态类和对象关于类关于对象三大特征第一封装关于封装思想 :private关键字this关键字构造方法构造方法注意事项总结面对对象的三...
    99+
    2022-11-12
  • 一篇文章带你了解JAVA面对对象之继承与修饰符
    目录Java面向对象之继承与修饰符继承1.含义2.实现3.好处4.短处5.成员变量的访问特点6.super () 方法7.继承中结构方法的访问特点8.方法重写9.java继承的注意事...
    99+
    2022-11-12
  • 学生视角带你了解Java内部类
    目录一、内部类介绍二、成员内部类:1、非静态内部类2、静态内部类二、局部内部类:2、有名的局部内部类1、匿名局部内部类(重要)一、内部类介绍 1.定义:一个类内部又嵌套了一个类,被嵌...
    99+
    2022-11-13
  • Java面向对象的封装你了解吗
    目录面向对象思想之封装什么是封装呢?封装的好处意义getter方法和setter方法toString方法总结:面向对象思想之封装 或许大家都听说过java是纯面向对象语言,面向对象思...
    99+
    2022-11-13
  • 一文带你搞懂Java中Object类和抽象类
    目录一、抽象类是什么二、初始抽象类2.1 基本语法2.2 继承抽象类三、抽象类总结四、Object类4.1 初始Object4.2 toString4.3 equals4.4 has...
    99+
    2022-11-13
  • 一篇文章带你了解Java基础-抽象
    目录Java基础知识(抽象)抽象抽象定义abstract的使用定义抽象类抽象类的一些注意点总结Java基础知识(抽象) 抽象 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃...
    99+
    2022-11-12
  • 了解java中对象基础Object类
    目录一、Object简述1、显式扩展2、引用与对象二、基础方法1、getClass2、toString3、equals与hashCode4、thread相关5、clone6、fina...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作