Java10-java语法基础(九)——java的封装性

一、Java的三大特性:封装、多态、继承

封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可信的类或者对象进行信息隐藏。

继承:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据成员和方法,并能扩展新的能力。

多态:多态性是指不同的对象,收到同一消息可以产生不同的结果。

二、面向对象编程的封装性

封装的实现:通过private关键字实现

1、封装数据成员和成员方法

(1)封装数据成员:一般情况下,没有特殊说明,类的数据成员都是私有的

private 数据类型 数据成员名称;

(2)封装成员方法:一般情况下,没有特殊说明,类的成员方法不要私有,否则就没有可以访问类的途径

private 方法返回值 方法名(参数列表){}

private 类名(参数){} —— 封装构造方法

三、访问控制修饰符

1、private:私有的,只能在类的内部访问;

2、protected:保护的,在类的内部、子类中、同一个包中;

2.5、默认的:在类的外部、子类、同一包中;

3、public:公有的,在任何地方都可以访问。

注意:任何一个java文件中,只能有一个公共主类:public class 类名(){},再写其他类不能加public,可以写class Test(){}

四、setter和getter方法

如何在类的外部访问私有数据成员?

访问:public String getName(){return name;}

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

注:

(1)eclipse自动生成get和set方法:右键——source——Generate Getters and Setters…

(2)字段就是数据成员(成员变量)

四、getters和setters方法作用:为用户提供了在类的外部访问类的私有数据成员的方法

1、setters:设置私有数据成员的值

格式:public void set私有数据成员名(私有数据成员类型名 要修改成的私有数据成员名){私有数据成员名 =要修改成的私有数据成员名;}

public void setName(String name) {

this.name = name;

}

2、getters:获取数据成员的值

格式:public String getName(){return私有数据成员名;}

public String getName() {

return name;

}

五、this关键字——代表当前对象

作用:

1、引用本类的数据成员和成员方法:

this.数据成员名

this.成员方法名([参数])

2、调用本类的构造方法

this.构造方法名([参数])

注意:在一个构造方法中,若用this调用另一个构造方法,则它必须是这个构造方法中的第一条语句;

问题:super()和this()为什么一定要在第一行?

  super()在第一行的原因就是: 子类有可能访问了父类对象, 比如在构造函数中使用父类对象的成员函数和变量, 在成员初始化使用了父类, 在代码块中使用了父类等, 所以为保证在子类可以访问父类对象之前要完成对父类对象的初始化。

  this()在第一行的原因就是: 为保证父类对象初始化的唯一性. 我们假设一种情况, 类B是类A的子类, 如果this()可以在构造函数的任意行使用, 那么会出现什么情况呢? 首先程序运行到构造函数B()的第一行, 发现没有调用this()和super(), 就自动在第一行补齐了super() , 完成了对父类对象的初始化, 然后返回子类的构造函数继续执行, 当运行到构造函数B()的"this(2) ;"时, 调用B类对象的B(int) 构造函数, 在B(int)中, 还会对父类对象再次初始化! 这就造成了对资源的浪费, 当然也有可能造成某些意想不到的结果, 不管怎样, 总之是不合理的, 所以this() 不能出现在除第一行以外的其他行!

3、使用this的情况

(1)形式参数名与类数据成员名重名时;

(2)方法的局部变量名与类的变量同名时;

(3)在一个构造方法中,调用类的另一个构造方法时,也就是表示当前对象。

原文地址:https://www.cnblogs.com/luoyu113/p/9315595.html

时间: 2024-09-28 21:16:52

Java10-java语法基础(九)——java的封装性的相关文章

java语法基础一

Java语法基础一 Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注:1.Java是严格区分大小写的. 2.Java程序中一句连续的字符串不能分开在两行中写. Java程序的注释 Java里的注释有三种类型: 1.单行注释 在注释内容前面加“//”,格式为: 代码; //注释内容 2.多行注释 以斜杠加星号开头,以星号加斜杠结尾. 3.文档注释 以斜杠加两个星号

Java语法基础

Java语法基础 1.  关键字 某些单词对编译器有着特殊的含义,并且不能作为标示符使用,全部是小写字母 Java语言关键字 abstract boolean break byte case catch char class try do default continue double else extends assert final finally float for If implement import instanceof int interface long native new g

java核心学习(九) java基础类库之Scanner

从第九节开始,对java的基础类库进行初步学习,这些基础类其中的一些内容是java程序员的基本功 言归正传,开始学习.对于java类库的具体使用方法,可以在IDE里面查看源码和注释,也可以在官方网站查看文档,本学习只是简单过一边重点,并不会面面俱到. Scanner顾名思义就是一个扫描器,可以从文件.输入流.字符串解析数据. 在new Scanner时可以使用不同的构造器参数来创建不同数据源的Scanner,如Scanner sc = new Scanner(System.in)就是对标准输入流

java 语法基础1

Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注: 1.Java是严格区分大小写的. 2.Java程序中一句连续的字符串不能分开在两行中写. Java程序的注释 Java里的注释有三种类型: 1.单行注释 在注释内容前面加"//",格式为: 代码;  //注释内容 2.多行注释 以斜杠加星号开头,以星号加斜杠结尾. 3.文档注释 以斜杠加两个星号开头,

java语法基础报告

一: 仔细阅读示例: EnumTest.java,运行它,分析运行结果? 运行结果 你能得到什么结论?你掌握了枚举类型的基本用法了吗? (1)枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. (2)枚举类型是引用类型 二: 请运行以下代码 运行结果如下 这个结果很意外,原因是java的浮点度 符号位S_指数位E_尾数位M 例如,一个float类型的数据占用4个字节共32位,其各个组成部分为: (1)符号位(S):最高位(31位)为符号位,表示整个浮点数的正负

Java 数组基础,java.util.Arrays

定义数组 方式1(推荐,更能表明数组类型) 方式2(同C语言) 方式3?定义时直接初始化 数组运用基础 数组长度 equals() 数组元素不为基本数据类型时 二维数组 二维数组基础 变长的二维数组 java.utils.Arrays 类 参考文献: ? 数组(Array):相同类型数据的集合. 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数]; 比如: int[] a = new int[10]; 数组名,也即引用a,指向数组元素的首地

【Java并发基础】Java线程的生命周期

前言 线程是操作系统中的一个概念,支持多线程的语言都是对OS中的线程进行了封装.要学好线程,就要搞清除它的生命周期,也就是生命周期各个节点的状态转换机制.不同的开发语言对操作系统中的线程进行了不同的封装,但是对于线程的声明周期这部分基本是相同的.下面先介绍通用的线程生命周期模型,然后详细介绍Java中的线程生命周期以及Java生命周期中各个状态是如何转换的. 通用的线程生命周期 上图为通用线程状态转换图(五态模型). 初始状态 线程被创建,但是还不允许分配CPU执行.这里的创建仅仅是指在编程语言

【Java并发基础】Java内存模型解决有序性和可见性

前言 解决并发编程中的可见性和有序性问题最直接的方法就是禁用CPU缓存和编译器的优化.但是,禁用这两者又会影响程序性能.于是我们要做的是按需禁用CPU缓存和编译器的优化. 如何按需禁用CPU缓存和编译器的优化就需要提到Java内存模型.Java内存模型是一个复杂的规范.其中最为重要的便是Happens-Before规则.下面我们先介绍如何利用Happens-Before规则解决可见性和有序性问题,然后我们再扩展简单介绍下Java内存模型以及我们前篇文章提到的重排序概念. volatile 在前一

java语法基础(总结)

1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9.a-z.$._ : 注意: 1),数字不可以开头. 2),不可以使用关键字. 3,常量:是在程序中的不会变化的数据. 4,变量:其实就是内存中的一个存储空间,用于存储常量数据. 作用:方便于运算.因为有些数据不确定.所以确定该数据的名词和存储空间. 特点:变量空间可以重复使用. 什么时候定义变量?只

黑马程序员——Java语法基础

一.关键字 1.定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有的字母都为小写. 2.分类 (1)用于定义数据类型的关键字:byte.short.int.long.float.double.char.boolean.class.interface.void (2)用于定义数据类型值的关键字:true.false.null (3)用于定义流程控制的关键字:if.else.switch.case.default.for.while.do.continue.break.ret