详解JAVA的封装

第一节 什么是JAVA中的封装

面向对象的三大特性:封装、继承、多态

1.概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法,来实现对隐藏信息的操作和访问。

2.好处

a只能通过规定的方法访问数据

b隐藏类的实例细节,方便修改和实现

3.封装的实现步骤

修改属性的可见性,改为设为private;创建getter/setter方法,用于属性的读写,创建一个特定的方法,一般是gettersetter方法,可以在gettersetter方法中加入属性控制语句,对属性值的合法性进行判断,举例来说:

public float getScreen(){
return screen;
}
public void setScreen(float screen){
this.screen=screen;
}

第二节 使用包管理JAVA中的类

封装的类名可能冲突,用包可以解决

1.包的作用,管理Java文件夹,管理同名文件冲突

2.定义包,package关键字

3.系统中的包

java.(功能).(类)

java.lang.类 包含java语言基础的类

java.util.类 包含java与语言中的各种工具类

java.io.类 包含输入输出相关功能类

4.包的使用

import 使用关键字可以在某个文件中使用其他文件中的类,全部都是小写

import com.imooc.music.Myclass;

import com.*是包下所有的类

第三节 JAVA中的访问修饰符

修饰我们属性和方法的访问范围

private 本类

默认 本类 同包

protected 本类 同包 子类

public 本类 同包 子类 其他

第四节 JAVA中的this关键字

1.this关键字代表当前对象,this.属性代表当前对象的属性,this.方法代表当前对象的方法

2.封装对象属性的时候经常会用到this关键字,例如this.a=a;

第五节 什么是JAVA中的内部类

1.什么是内部类:

内部类是定义在另一个类里面,与之对应,包含内部类的类被称为外部类。

2.为什么要将一个类定义在另一个类里,清清爽爽独立不好吗?

内部类的主要作用是:

内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中其他类访问该类。

内部类中的方法可以直接访问外部类的所有数据,包括私有数据

内部类所实现的功能使用外部类同样可以实现,是有时使用内部类会更加方便。

3.内部类有几种:

成员内部类;静态内部类;方法内部类和匿名内部类

内部类其实也是外部类的一个成员,只不过这个成员类型是一个类,调用时要先实现外部类,然后才能找到该类下的内部类实现。例:

public class HelloWorld{
public class Inner{
方法show();
}
main函数{
HelloWorld h=new HelloWorld();
Inner i=h.new Inner();
i show;
}
}

定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,也就是:内部类 对象名=外部类对象.new 内部类();

第六节 JAVA中的成员内部类

内部类中最常见的也就是成员内部类,即普通内部类。

成员内部类的使用方法:

1.内部类定义在外部类的内部,相当于外部类的一个成员变量的位置,内部类可以使用任意访问修饰符,如public private protected等

2.内部类中定义的方法,可以访问外部类中的数据,而不受访问修饰符的影响

3.定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,也就是:内部类 对象名=外部类对象.new 内部类();

4.编译含内部类的程序时,会出现两个class文件,其中第二个是外部类的.class文件,第一个是内部类.class文件,成员内部类的class文件总是这样,外部类名$内部类名.class 这是内部类.class名字

注意:

a.外部类不能直接使用内部类的成员和方法,可以先创建内部类对象,然后通过它们的对象来访问其成员变量和方法;

b.如内部类和外部类具有相同的成员变量和方法,内部类默认访问自己的成员变量或方法。如果要访问外部类的成员变量,可以使用this关键字,外部类.this.属性。如:

第七节 JAVA中的静态内部类

静态内部类是static修饰的内部类,这种内部类的特点是:

1、静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

运行结果,访问外部类中的b:1

访问内部类中的b:2

第八节 JAVA中的方法内部类

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

希望本文所述可以对需要的朋友有些帮助

(0)

相关推荐

  • Java封装、继承、多态三大特征的理解

    首先先简单的说一下其3大特性的定义: 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别.将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员.封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员.封装的基本要求是: 把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的

  • 全面了解java基本类型和封装类型的区别及应用

    1. 基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的. 2. 从性能上说java中的基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建的,(对象的引用在堆栈上创建).比如 Integer i=new Integer(10); 其中new Integer()是在堆上创建的,而他的引用Integer i是在堆栈上. 封装类的出现,是为了更方便的使用一些基本类型不具备的方法,比如valueOf(),toString()等等.还有你如果想传递一个int对象的引用,而不是值,那只能用

  • Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字

  • 详解Java中的封装、继承、多态

    封装 在如何理解面向对象这篇文章中,提到所谓的封装就是"功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可.".但你得清楚一点,那就是这句话是相对于使用者来说的,而作为开发者,封装就得我们自己来干. 那么作为开发者,我们应该如何去封装呢?其实你应该反过来问,他们应该如何去使用,这样一想会简单很多,作为使用者,自然是希望越简单越好,也就是说,一些复杂的东西,我们不应该让使用者去操作,那也就是说我们应该把复杂的,以及不必要的参数给它封死,不让使用者去操作. 为什么不让使用者去操作

  • Java基础教程之封装与接口

    总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对象可以有状态和动作,即数据成员和方法. 到现在为止,数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对象的数据成员和方法. 我们将要封装(encapsulation)对象的成员(成员包括数据成员和方法),从而只允许从外部调用部分的成员.利用封装,我们可以提高对象的易用

  • JavaBean和Map转换封装类的方法

    实例如下: package com.ljq.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.ut

  • 详解JAVA的封装

    第一节 什么是JAVA中的封装 面向对象的三大特性:封装.继承.多态. 1.概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法,来实现对隐藏信息的操作和访问. 2.好处: a只能通过规定的方法访问数据 b隐藏类的实例细节,方便修改和实现 3.封装的实现步骤 修改属性的可见性,改为设为private:创建getter/setter方法,用于属性的读写,创建一个特定的方法,一般是gettersetter方法,可以在gettersetter方法中加入属性控制语句,对属性

  • 详解java调用存储过程并封装成map

    详解java调用存储过程并封装成map 本文代码中注释写的比较清楚不在单独说明,希望能帮助到大家, 实例代码: public List<Map<String , Object>> doCallProcedure(String procedureString,String[] parameters) throws PersistentDataOperationException { if (!isReady ()) { throw new PersistentDataOperatio

  • 详解Java Socket通信封装MIna框架

    核心类 IoService :Mina中将服务端和客户端都看成是服务,这里提供统一接口IoService,这个接口的作用就是用来处理套接字机制.也正是IoService来监听消息返回消息这些步骤,可以说IoService就是我们Mina中核心 IoProcessor:这个接口在另一个线程上,负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分Io

  • 详解Java中的 枚举与泛型

    详解Java中的 枚举与泛型 一:首先从枚举开始说起 枚举类型是JDK5.0的新特征.Sun引进了一个全新的关键字enum来定义一个枚举类.下面就是一个典型枚举类型的定义: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类. 而这些类都是类库中Enum类的子类(Java.lang.Enum).它们继承了这个Enum中的许多有用的方法.我们对代码编译之后发现,编译器将 enu

  • 详解Java面试官最爱问的volatile关键字

    本文向大家分享的主要内容是Java面试中一个常见的知识点:volatile关键字.本文详细介绍了volatile关键字的方方面面,希望大家在阅读过本文之后,能完美解决volatile关键字的相关问题.  在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来,深入地话还可以考察JVM底层实现以及操作系统的相关知识. 下面我们以一次假想的面试过

  • 详解Java分布式IP限流和防止恶意IP攻击方案

    前言 限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足.但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为力.本文介绍一种简单的处理方式,用于分布式环境下接口调用频次管控. 如何防止恶意IP攻击某些暴露的接口呢(比如某些场景下短信验证码服务)?本文介绍一种本地缓存和分布式缓存集成方式判断远程IP是否为恶意调用接口的IP. 分布式IP限流 思路是使用redis incr命令,完成一段时间内接口请求次数的统

  • 详解Java Callable接口实现多线程的方式

    在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求io,cup等资源.因为线程run方法没有返回值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦. 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果. Callable和Future介

  • 详解Java高级特性之反射

    定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 用途 在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量.方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法.当然,也不是所有的都适合反射,之前就遇到一个案例,通过反射得到的结果与预期不符.阅读源码发现,经过层层调用后在

  • 详解JAVA 反射机制

    什么是反射? 反射机制是在程序运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射的作用 1.可以实现简单的反编译,获取类中的属性和方法等基本信息,.class->java 2.通过反射机制获取类的属性.方法等 在使用eclipse时,通过对象引用.的方式,eclipse就会将这个对象中的所有属性和方法展示出来,这个就是利用的反射机制.其实反射应用最多的

  • 详解JAVA设计模式之模板模式

    在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型模式. 介绍 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 主要解决:一些方法通用,却在每一个子类都重新写了这一方法. 何时使用:有一些通用的方法. 如何解决:将这些通用算法抽象出来. 关键代码:在抽象类实现,其他步骤在子

随机推荐