带你了解Java的类和对象

目录
  • 五丶封装
    • (1)包的概念与创建
      • 1>概念
      • 2>创建
    • (2)包的使用–导入包
    • (3)封装定义–权限控制访问
    • (4)补充些常用的包(小拓展)
  • 六丶关于static成员
    • (1)修饰成员变量–区分成员丶静态成员变量
    • (2)修饰成员方法–调用私有变量
    • (3)访问私有属性
  • 七丶代码块
    • (1)普通代码块
    • (2)构造代码块
    • (3)静态代码块
  • 总结

五丶封装

(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)实例代码块只有在创建对象时才会执行。

总结

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

(0)

相关推荐

  • 了解java中对象基础Object类

    目录 一.Object简述 1.显式扩展 2.引用与对象 二.基础方法 1.getClass 2.toString 3.equals与hashCode 4.thread相关 5.clone 6.finalize 三.生命周期 1.作用域 2.垃圾回收机制 四.源代码地址 一.Object简述 源码注释:Object类是所有类层级关系的Root节点,作为所有类的超类,包括数组也实现了该类的方法,注意这里说的很明确,指类层面. 所以在Java中有一句常说的话,一切皆对象,这话并不离谱. 1.显式扩展

  • 带你入门Java的类与对象

    目录 类和对象 类的属性 成员方法 形参和实参 局部变量 可变参数 构造方法 this关键字 this.属性名 this.方法名 static关键字 静态变量 1)静态变量 2)实例变量 静态方法 静态代码块 对象的创建 显式创建对象 方法隐含创建对象 总结 匿名对象 总结 类和对象 在面向对象中,类和对象是最基本.最重要的组成单元.类实际上是表示一个客观世界某类群体的一些基本特征抽象.对象就是表示一个个具体的东西.所以说类是对象的抽象,对象是类的具体. "人类"只是一个抽象的概念,它

  • java对象转化成String类型的四种方法小结

    目录 方法1:采用 Object#toString()方法 方法2:采用类型转换(String)object方法 方法3:采用 String.valueOf(Object) 方法 方法4:采用 ""+object方法 在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object#toString(),(String)要转换的对象,String.valueOf(Object)等. 方法1:采用 Object

  • 一篇文章带你深入了解Java对象与Java类

    目录 1.面向对象是什么? 2.Java类 1.什么是类 2.Java类 类的结构 Java类的格式 3.java对象 4.类和对象 5.类中的变量,方法 1.变量分类 成员变量: 局部变量: 2.方法分类 6.方法重载 7.对象与引用 基本类型和引用类型的区别: 值传递与引用传递 8.static关键字 概念 static属性 static方法 代码块 9.类的加载执行 10.包 包的概念: 包的作用: 包(package)的命名规范: 访问权限修饰符 11.面向对象语言的三大特征 1.封装

  • 手把手带你粗略了解Java--类和对象

    目录 认识类和对象 1.类.对象是什么? 2.什么是面向对象? 3.一个对象的产生过程是?

  • 带你了解Java的类和对象

    目录 五丶封装 (1)包的概念与创建 1>概念 2>创建 (2)包的使用–导入包 (3)封装定义–权限控制访问 (4)补充些常用的包(小拓展) 六丶关于static成员 (1)修饰成员变量–区分成员丶静态成员变量 (2)修饰成员方法–调用私有变量 (3)访问私有属性 七丶代码块 (1)普通代码块 (2)构造代码块 (3)静态代码块 总结 五丶封装 (1)包的概念与创建 1>概念 在我们的电脑上有许多的文件,我们为了方便管理,大致给它们进行了不同的命名. 然后在不同的文件夹下面再给它们进行

  • Java面向对象类和对象实例详解

    目录 1 - Java面向对象学习的三条主线 2 - 面向过程与面向对象 3 - 面向对象的三大特征 4 - 面向对象分析方法分析问题的思路和步骤 5 - 面向对象的思想概述 6 - 类和对象的创建-内存解析 7 - 类中属性的声明和使用(局部变量与成员变量的区别) 8 - 类中方法的声明和使用 9 - 对象数组的使用 10 - 理解 "万物皆对象" 11 - 匿名对象 12 - 方法的封装(数组常用算法的封装) 总结 1 - Java面向对象学习的三条主线 ①Java类即类的成员:属

  • 带你了解Java常用类小结

    目录 Java常用类 包装类 包装类中的常量 包装类的构造方法 包装类中的常用方法 Math类 枚举 枚举定义 枚举的常见方法 总结 Java常用类 包装类 由于Java语言中的基本类型不是面向对象,并不具备对象的性质,实际使用存在很多不便.Java在java.lang包中提供了八种基本类型对应的包装类,可以方便地将它们转化为对象进行处理,并且可以调用一些方法.Java中基本类型和包装类的对应关系如下表所示: 基本数据类型名称 包装类名称 byte Byte short Short int In

  • Javascript创建类和对象详解

    现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = new Object(); person.name="Amy"; person.sex="Woman"; person.show=function(){ document.write("name is: "+this.name+" ; se

  • java类和对象原理与用法分析

    本文实例讲述了java类和对象原理与用法.分享给大家供大家参考,具体如下: 面向对象编程OOP 类:相似对象的集合. 对象 对象:实体.一切可以被描述的事物. 属性:特征. 方法:动作,行为. 类和对象的区别 [1]类时抽象的,对象是具体的. [2]类是一个模板,创建出来的对象具备共同的属性和方法. [3]类是一种数据烈性.引用数据类型. 语法 public classs 类名{ //定义属性部分 属性1的类型 属性1: 属性2的类型 属性2: ... 属性3的类型 属性n; //定义方法部分

  • Java反射(Class类,Class对象获取)

    目录 Java反射超详解 1.反射基础 1.1Class类 1.2类加载 2.反射的使用 2.1Class对象的获取 2.2Constructor类及其用法 2.3Field类及其用法 Java反射超详解 1.反射基础 Java反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法:对于任意一个对象,都能够知道它的任意属性和方法,这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制. Java反射机制主要提供以下这几个功能: 在运行时判断任意一个对象所属的类

  • Java 基础语法让你弄懂类和对象

    目录 Java 基础语法 一.类与对象的初步认知 二.类和类的实例化 三.类的成员 1. 字段/属性/成员变量 2. 方法 3. static 关键字 四.封装 1. private 实现封装 2. getter 和 setter 方法 五.构造方法 1. 基本语法 2. this 关键字 六.认识代码块 1. 什么是代码块 2. 本地代码块 3. 实例代码块 4. 静态代码块 七.补充说明 1. toString 方法 2. 匿名对象 八.总结 Java 基础语法 其实在学习 C 语言时就一直

  • Java 类与对象重难点详解

    目录 什么是类.对象? 类和类的实例化 字段的初始化 类当中实现方法 static 静态关键字 封装 private 实现封装 setter 和 getter 方法 构造方法 this 关键字 匿名对象 什么是类.对象? 因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象.类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能.调用者就是对象的实现者 类和类的实例化 类是一类对象的统称,对象就是这一类具体化的实例 创建类的关键字:class 举

  • Java 精炼解读类和对象原理

    面向对象.面向过程 什么是类? 什么是对象? 这是非常抽象的两个概念!!!!!!!! 在说清楚类和对象的概念之前,给大家讲一下什么是面向对象.面向过程,以此来推出我们类和对象的概念. 面向过程:以洗衣服为例:拿盆.放水.放衣服.放洗衣粉.手搓.换水.拧干.晾衣服,这个过程就是面向过程.  面向对象:以洗衣服为例:人把衣服放进洗衣机,倒入洗衣粉,洗完晾干,不需要关心洗衣服整个过程是怎么完成的,只需要找对象,创建对象,使用对象.在好比我们使用toString函数,我们并不关心toString函数具体

随机推荐