JAVA基础学习——Day11(封装)

一、day10复习

1. this关键字(表示对当前对象的引用,和具体对象有关)

A. this修饰属性表示直接从类中寻找同名的成员变量

B. this修饰方法

a. this修饰成员方法:this.成员方法名();表示从类中寻找并调用该成员方法

b. this修饰构造方法: this(参数);表示从类中寻找并调用该构造方法,且this(参数)只能写在构造方法的首行,且不能成环

注意:只有构造方法之间才能相互调用,成员方法中不能调用构造方法。(构造方法只能通过产生对象时,编译器自动调用,为成员变量赋初始值;一组构造方法就是为了不同成员变量的赋值,因此可以互相调用)

C. this表示当前对象的引用,通过哪个对象调用属性或方法,this就指代谁

2. static: 与具体对象无关,和类本身有关

A. static修饰的属性称为类属性,与对象无关,和类本身有关,该类的所有对象共享此属性,在JVM的方法区保存静态变量

B. static修饰的方法称为类方法,一般工具类方法设置为静态方法,与对象无关

eg: Math.max(a,b); Array.sort(数组名); 与类强相关,与具体的对象无关。比如求最大值,不论哪个对象都是一样的规则

3. 注意:

A. 在静态方法中能否调用成员方法或者成员变量(F,成员方法或成员变量必须先生成对象通过对象调用,静态方法可以直接通过类调用,前后矛盾)

B. 在成员方法中能否调用静态方法或静态变量(T, 静态域没对象都能调用,成员方法是必须由对象才能调用,因此当然能够调用,虽然格式正确但是不推荐,一般直接通过类来调用静态域)

4. 注意:

A. 在静态方法中能否使用this关键字(F, this表示对象的引用,和注意3中的A类似)

B. 在成员方法中能否使用this关键字调用静态属性或方法(F,静态属性或方法没对象都能调用,因此肯定能够调用,但是一般不推荐)

 

 5. 代码块

A. 普通代码块:直接定义在方法中,{}括起来的代码

B. 构造块:定义在类中,用{}括起来的代码。(实际上在编译的时候,将所有的构造块按之前的先后顺序移动到构造方法的最上方)

C. 静态块:使用static修饰,定义在类中的,用{}括起来的代码,只在类加载的时候执行一次,一般用于类的静态变量的初始化或者用于打印类加载相关信息

注意:执行顺序:静态块>构造块>构造方法>普通方法。相同类型代码块之间按照顺序向下执行。

二、代码块等作业讲解

1. 例题1:

 解析:答案应该选A

2. 例题2

 解析:答案选D,方法中定义的都是局部变量,一律都在栈帧中存储

3. 例题3

解析:静态方法中能够调用静态变量,因此不会编译出错,同时boolean类型的初始值为false,因此结果为false

 4. 例题4

 解析:考察代码块的执行顺序。静态块>构造块>构造方法(调用的对应的)>普通方法,相同类型按顺序执行。因此(6+9)/3,最后输出 = 5 

三、数组练习等_作业讲解

1. 例题1:

 解析:答案选择C,定义在方法中的都是局部变量,局部变量必须赋值后才能使用,否则会编译出错

2. 例题2

解析: this调用构造方法的语法为: this(参数);

3. 例题3:

(1)个人代码和测试

(2)示例代码和测试

 

 

 (3)代码思路:采用双引用法

 4. 例题4

 (1)个人代码实现和测试

(2)思路:

 5. 例题5

(1) 思路1:排序法

(2)思路2:利用哈希表<元素,出现次数>(暂时没学不实现代码)

(3)思路3:摩尔投票法 (速度最快,时间复杂度为O(n))

A. 摩尔投票法规则:从第一个元素开始投票,默认候选人就是第一个元素,初始票数为1(自己给自己的一票)。从第二个元素开始进行投票,出现相同的数字,票数+1;出现不同的数字,票数-1。当票数减为0的时候,更换候选人为后一个元素,并使得票数+1(自己给自己一票)

直到整个数组扫描完毕,最终剩下的候选人即为众数

B. 摩尔投票法原理:

C. 实现代码:

a. 个人代码

 b. 示例代码

 

 D. 递归解决众数问题

6. 例题6

 (1)个人代码

(2)示例代码(标记位,更优)

A. 示例代码思路

 当oddCount == 3,则直接返回true退出。扫描一整个都没有退出,则返回false

B.实现 

 四、封装

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

1. 封装(强调的是保护和易用):对外屏蔽类内部一些实现细节,类的外部只能通过类提供的方法来操作类

(1)定义:

 (2)封装现实例子:

 (3)如何实现封装:通过类结构以及访问修饰符来实现封装(访问修饰符控制方法或属性只对哪些类可见)

2. 四大访问修饰符

(1)可见性依次从小到大为

private(私有权限,仅类的内部可见) < defaul(包访问权限,包内部可见)t < protected(继承权限) < public(公开的,所有对象可见)

(2)public: 当访问修饰符使用public,则当前项目中,任何地方都可以调用public权限的域(类,属性,方法都可以)

(3)private访问修饰符:

A. private 修饰属性

a. 称为私有属性,这些属性只在当前类的内部可见(出了类,对外部完全隐藏,如果强行调用则报错)。

b. 使用private关键字对属性进行封装操作 (一般常用作用)

c. 为什么要用private封装(保护性)

<1>如果都定义为public来说,可能会有安全风险

<2>如果都定义为private然后用getter和setter方法来使用的意义(体现保护性)

d.  private封装示例(私有属性创建,直接强行访问私有属性)

 e. 当属性被private封装后,类中需要提供getter和setter方法来控制私有属性被外部的访问,类的外部通过getter/setter方法(这两个方法都是public权限,为了外部能使用)来使用私有属性

<1>

getter->取得私有属性 (命名规则:get开头 + 属性名称 )

setter->修改私有属性 (命名规则:set开头 + 属性名称 )

<2>需要在外部访问的加上getter方法,需要在外部修改的加上setter方法

<3>以下为示例(实现私有属性的getter,setter方法)

getter方法:

 

setter方法

f. 阿里编码规约:类中变量没有特殊情况,统一使用private进行封装,合理提供getter方法和setter方法

(4)包访问权限 default =》

A. 注意:这个关键字不需要写,权限修饰符什么都不写就是包权限!!!如下例子

 B. 包:文件夹

a. 操作系统在同一个文件夹下不能存在同名文件(文件名= 文件名称 + 文件类型)

 b. java中使用关键字package声明一个包,就是(操作系统的)文件夹。用于解决类名称重复的问题(不同的包下可以存在相同名称的类,相同的包不能存在相同名称的类)。

c. 如何在IDEA中创建一个包。在src下new一个package。包的命名是全小写的,多个单词之间用_分隔

<1>创建方法

<2>创建的包

 

<3>在创建的包内新建一个BankTest类

 d.  若多个包下都存在同名的类,就要使用import导入某个包下的某个类(来解决不知道使用的是哪个类的问题),方法如下。

注意:import关键字是用来导入类的,不是包

<1>语法为:

import 类的全名称 (包名.类名); //java.util.Date其中java.util是包名,Date是类名

<2>例子:

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值