Java10-面向对象-封装

封装

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

面向对象四大特性: 封装,继承,多态,抽象

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。

封装可以被认为是一个保护屏障,

防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。

适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

封装好处:

  1. 高代码的安全性

  2. 提高代码的易用性(复用性)

  3. 隐藏了内部的实现,防止外部的修改

封装原则(设计原则/ 如何实现封装):

​ 把不想让外界知识的实现细节,给封装起来, 提供公共的访问方式(调用)

封装的体现形式:

方法,对象(类), private

用到修饰符的地方:

  1. 成员变量 的定义( 类中方法外的变量)
  2. 成员方法的定义
  3. 类的定义

private 的特点

  1. private 修饰符,可以修饰成员变量和成员方法, 不能修饰类

  2. private 修饰的成员变量和成员方法,只能在本类中访问(使用)

  3. 外界只能通过公共的方法来间接的调用

​ 使用private 可以让可以在设置属性时,添加自己的业务需求,为什么? 因为它是通过setXX方法去进行修改.

标准的封装(JavaBean)

class 类名{

// 私有属性

// 成员方法

// setXX 和 getXX

}

this关键字

在方法中,如果局部变量与成员变量同名了,采用的是就近原则 ,所以当你使用这个名字,它指的是局部变量。

java 提供了一个关键字this, 代表是当前类的对象。

注: 哪个对象调用这个方法,该方法内部的this,就代表那个对象

this应用的场景:

  1. 解决了局部变量隐藏成员问题
  2. 调用当前类的构造方法 ,如: this(…)

构造方法

构造方法 :

作用是创建对象(对象数据初始化)

构造方法的格式

 1.方法名与类名相同
 2.没有返回值 ,连void都没有
 3.构造方法可以重载
 //如学生类的构造方法
     public Student(){
 }			//无参构造

注意事项:

  1. 如果我们没有构造方法,系统会自动给一个无参构造方法。

  2. 如果我们给出构造方法,系统将不会提供无参构造方法, 这个要可以写构造方法,无参与有参都要写

    建议: 永远给出无参构造方法。

类的组成

成员变量

成员方法

构造方法

给成员变量赋值的方法

  1. 通过setXX方法
  2. 带参的构造方法

static

静态变量与静态方法

static 是一个修饰符,修饰成员属性时,称为静态变量, 修饰成员方法,称为静态方法

static 的特点

  1. 随着类的加载而加载
  2. 优先于对象
  3. 被类的所有对象共享
  4. 可以通过类名调用,也可以通过对象名调用,但是推荐使用类名调用

static 关键字的注意事项

  1. 静态方法里没有this关键字(就是不能用this)

    如何理解 ?

    静态随着类的加载而加载,this是随着对象的创建而存在

  2. 静态方法只能访问静态变量和静态方法

    成员方法:即可以调用成员属性,也可以调用静态属性

    记住:静态的只能访问静态的

静态变量与成员变量的区别

所属不同
	静态变量属于类,所以也称为为类变量   
	成员变量属于对象,所以也称为实例变量(对象变量)   

内存中位置不同
	静态变量存储于方法区的静态区
	成员变量存储于堆内存

内存出现时间不同
	静态变量随着类的加载而加载,随着类的消失而消失
	成员变量随着对象的创建而存在,随着对象的消失而消失

调用不同
	静态变量可以通过类名调用,也可以通过对象调用
	成员变量只能通过对象名调用

main方法

public static void main(String[] args){
   
}

public : 公共的/公开的  访问权限最大, main 方法由jvm调用 ,所以权限足够大

static : 静态的 不需要创建对象,通过类名可以直接调用。方便jvm调用

void : 方法返回值类型给调用者 由jvm调用的 返回值给jvm是没有意义的

main: 是一个常见的方法入口

String[] args : 字符 中数组 ,用户输入的

​ 这个东西是早期的键盘录入,已经被Scanner淘汰了

代码块

代码块: {} 括起来的代码被称为代码块

分类:

局部代码块: 方法中定义的代码块,它的作用主要是限制变量的作用范围

构造代码块:类中的方法外(类的成员位置),每次在构造方法执行之前会先执行构造代码块

作用: 如果多个构造方法中有相同的代码,可以放在构造代码块中

每个构造方法执行之前,都会先执行构造代码块

静态代码块:类中的方法外(类的成员位置),用{}括起来,且在前面加上static关键字

作用: 对类进行初始化,仅仅执行1次

代码块的执行顺序 : 静态代码块 > 构造代码块 > 局部代码块

java中包的本质 : 就是文件夹

注:在一个文件夹下面同名的同类型的文件只能出现一个

当有多级目录的时候,java中

包名1.包名2.包名3

直接右键选择创建包, 如:com.gxa.student idea中看到的一个目录文件夹,但是实现上是创建了3个文件夹

创建包: 选择src 右键 new -> package

包名的命名规则

包名用小写字母,不要驼峰,不要中文

怎么在包中放类

使用package 声明这个类在哪一个包下

不同包下面的类的访问

使用import 关键字,导入包

导入包的两种方法

  1. 单类型导入(导一个)

    import com.gxa.student.Student;

    import com.gxa.student.Person;

  2. 按需导入

​ import com.gxa.student.*;

按需类型导人 (type-import-on-demand), 例如import java. util.*
单类型导入比较好理解,编程所使用的各种工具默认都是按照单类型导入的,需要什么类便导人什么类,这种方式是导入指定的public类或者接口;
按需类型导入,比如 import java. util. * 可能看到后面的* 程序员会以为是导入java. util 包下的所有类, 其实并不是这样,Java会根据名字知道是按照需求导入,并不是导入整个包下的所有类。

按需类型导入是绝对不会降低Java 代码的执行效率的,但会影响到Java代码的编译速度。

所以在编码时最好是使用单类型导入,这样不仅能提高编译速度,也能避免命名冲突。

全局导入和局部导入

全局导入 在当前整个类上面都可以使用导入的类

 import com.gxa.find.Teacher;

局部导入 用的非常少 如果要使用的类和全局导入的类名相同,可以使用局部导入 一次性

com.update.Student s2=new com.update.Student();
  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值