day06回顾
面向对象基于面向过程
理解面向对象
day07
课程目标:
理解封装与其常见的表现形式
掌握构造方法
掌握this关键字
理解代码块及其作用
理解static关键字功能、用法、特点及注意事项
了解API文档的制作过程
掌握API文档的使用
掌握Math类的常用方法
封装(函数)
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
为保证数据的真实性就必须对数据进行校验!要想过校验就必须过逻辑结构语句!
要想写逻辑结构语句就必须定义方法!
所有做逻辑判断循环操作的必须在循环中
这样即使写了方法别人还是可以通过:对象.成员变量直接使用。首先要解决的根本问题是让外界不能直接
通过对象.成员变量访问数据
java就提供了一个修饰符private,该关键字表示私有可用于修饰成员变量和成员方法。
被它修饰完毕的内容,在其他类中是不能直接访问的(本类中可以)
private是一种访问权限修饰符,用于修饰成员,被私有化的成员只有在本类中有效
接下来要解决逻辑校验问题
将成员变量私有化,对外提供对应的set,get方法对其进行访问,提高对数据访问的安全性
方法内部加if语句进行逻辑控制
/*
if (age<0 || age>150)
{
System.out.println("年龄输入错误");
}
else
{
this.age = age;
}一般在客户端校验,此处只是引出思路
*/
//设置后输出
//直接获取
private仅仅是封装的一种体现
类,成员变量,成员方法,构造函数
构造方法
特点
方法名与类名一致
没有返回值类型(与返回值为void不同)
public Student(){}
没有具体返回值
作用:
给对象进行初始化的(构造对象)
注意事项
如果没有给出任何构造方法,系统将默认提供一个无参构造
public Student(){}
如果显示给出了构造,系统将不再提供默认的无参构造
this关键字
this代表其所在函数所属的对象的引用
代表本类对象的引用
哪个对象调用方法,this就代表哪个
用途
解决局部变量隐藏成员变量问题
代码块
就是由{}括起来的代码
分类
局部代码块
定义在方法中
作用:让变量尽可能早的从内存消失,提高效率
构造代码块
定义在方法外
作用:把所有构造方法中的共同的内容定义在构造代码块中
每次创建对象都会在构造方法之前运行一次
构造代码块要先于构造方法执行
static关键字
如果有相同字符串,每次都来创建对象都定义一个,这样是不符合实际的。比如国籍
将来只存储一个关键字该多好
java提供了static
它可以修饰成员变量和成员方法
多个对象共享某个数据的时候,就用static关键字
类的构成
成员变量--外在描述
成员方法--对数据进行初始化
构造方法--功能
static修饰成员变量和成员方法
atatic特点
随着类的加载而加载;优先于对象存在(对象一new才存在)
被本类的所有对象所共享(最大特点)
没有被静态的内容实际是所属对象的特殊描述
只要一个对象修改其中的值其他对象获取的值
举例:饮水机和水杯的问题
可以直接被类名调用(不用创建对象就可调用)
成员属性
类名.属性名;
成员方法
类名.方法名();
class Demo
{
main()
{
int sum = Demo.sum(10,30);//本类里边,Demo.可以省略
System.out.println("sum="+sum);
}
public int sum(int i,int j)
{
returen i+j;
}
}
static对象可以调用静态方法吗?
注意事项:
静态方法中是没有this关键字的,
因为静态是随着类的加载而加载,而this是对象创建之后才有的
静态方法只能访问静态成员变量和静态成员方法,
非静态方法都可访问
静态方法内可以定义静态变量吗?
不可以,原因:方法中的变量是局部变量并不能被方法之外所识别
静态变量属于整个类,并不属于某个对象
静态的内容可以通过类名访问(类名.静态方法)也可对象调用,推荐使用类名访问
不同java文件中类的调用
同一文件夹下,如果在一个类A中使用另外的类B的内容(不同文件夹时用导包方式)
方式1:先编译B再编译A类
方式2:直接编译A类,会自动编译B类(推荐)
生成帮助文档(说明书)
文档注释可以生成api中的说明文字
/**
文档内容
这是一个操作数组的工具类,它里边有遍历以及获取最值的功能
@author itcast
@version v1.0
*/
命令格式
javadoc存放 目录 doc -author -version 类名.java
//javadoc报错:找不到公共类。。。。。
此时在class前加public
做工具类的时候方法要做成静态的
%%如何使用jdk提供的api,以math举例
api:应用程序编程接口(帮助文档)
步骤:
找到文档,打开文档
点击显示继续点击索引
确定要找的math
看类的结构
java.lang包的目录可以直接使用,如果不是就导包
看类的说明
看构造方法
注意:字段--成员变量--属性
1,有构造方法就通过构造方法创建对象调用
2,没有构造方法,这个类的成员一般都是静态--》类调用
按照正常的操作方法
左边
是否为静态,静态修饰可以
是否有明确返回值,如果是void
右边
看方法名
%% 看参数
math中我们需要掌握的功能
static int abs(int a)---绝对值
static double ceil(double )----向上取整
static double floor(double )----向下取整
static long round(double a)----四舍五入
static int round(float a)----四舍五入
double random()---[0.0,1.0)的随机数
max(int x,int y)--最大值
min(int x,int y)--最小值
day07串讲
面向对象三大特性之封装
1)封装概念:隐藏对象实现细节,仅提供公共对外访问方式
类:对属性和行为进行封装
方法:对功能进行封装
变量:
隐藏属性
private关键字--私有的
提供公共的方式访问--get/set (getters/setters)
变量名要起的见名知意(成员和局部重名)
引出this关键字--代表本类对象的引用
解决了局部隐藏成员的问题
还可在构造方法中使用
局部代码块
方法里出现的{}
控制变量生命周期
构造代码块
定义在方法外面,类里出现的一对{}
为把构造方法里共性的内容提取出来,减少代码的的重复性
应用特点:先于构造方法而执行,并且每次创建对象都执行
静态代码块--构造代码块--局部代码块
三个经常结合起来出题目
atatict关键字:
修饰成员属性和方法,为了让成员被类的多个对象共享
随着类的加载而加载,优先于对象存在,可以直接使用类名调用
格式:类名.变量名
注意:
静态的方法只能访问静态成员
静态方法内不能定义静态变量
两个java文件
程序的运行依赖于class文件,如果想B类想使用A类里面的东西必须要先保证A.class文件存在
api文档:应用程序接口(提供了一些可以被调用的现成的工具,找不到自己再去定义)
生成:java -d 目录 -author -version 类名.java
打开 index.html
要求:必须会查api(每个公司都会封装自己的api)
索引-搜索-阅读
标准的类;
私有的成员属性,公共的构造方法,公共的成员方法 |