JavaSe基础(6)-- 方法
来源:互联网 发布:网络游戏音乐大全 编辑:程序博客网 时间:2024/06/07 20:03
day06 方法
- 访问权限
- 方法
- setter getter this
- 构造方法
- 方法的重载
访问权限
面向对象编程三大特征之一 封装
什么是封装?
对象的一种保护机制,隐藏对象的属性和实现细节,仅对外提供公共访问方式。
白话: 该露的露,该藏的藏
专业: 我们程序设计要追求“高内聚,低耦合”。高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅暴露少量的方法给外部使用
耦合: 程序的一部分对另一部分的依赖关系目的:
隐藏一个类的实现细节, 便于调用者调用
防止对封装数据的未经授权的访问,有利于保证数据的完整性
便于修改,增强代码的可维护性封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问示例:
/*人:属性: 年龄。行为: 说话。*/class Person{ int age; void speak() { System.out.println("age="+age); }}class PersonDemo{ public static void main(String[] args) { Person p = new Person();// p.age = 20; //可以 p.age = -20; //??? }}
p.age = -20;这个是不是不太合适啊。
我们在对事物进行描述的时候,要符合事物的特点?年龄没有负数的啊
那为什么会发生这种现象?我们只用到了这种类型中的一部分。
那么该怎么办?
我们要对这样的数据进行控制?
出现这种现象是因为,这个age在被其他程序创建对象后,直接访问了,这样造成了安全隐患。
那么就不让他访问?我们使用private(私有的意思)关键字进行限定class Person{ private /*私有*/int age; public void live(int a) { if(a>0 && a<130) { age = a; speak(); } else System.out.println("错误的数据"); } void speak() { System.out.println("age="+age); }}class Person{ private /*私有*/int age; public void setAge(int a)//setXxx getXxx { age = a; } public int getAge() { return age; } void speak() { System.out.println("age="+age); }}
- private:私有,是一个权限修饰符。用于修饰成员。
- 私有的内容只在本类中有效。
- 注意:私有仅仅是封装的一种体现而已。
修饰符(modifier)
- 在类、类的属性以及类的方法前面加修饰符可限定其访问权限,实现其在一定范围内的信息隐藏。
default不是一个修饰符,而是表示一种不加任何修饰符时的状态Protected同一个包的正常类,可以直接用他的实例进行访问 不同包的正常类,无法访问任何属性和方法 不同包的子类,不能使用父类实例的属性和方法 不同包的子类,不能使用其它包的子类实例的属性和方法 不同包的子类,可以直接使用父类的属性和方法 总之,不同包的子类就规规矩矩的在自己的代码里用父类的属性就行了。其它的使用都是不允许的。
方法
什么是函数?
函数就是定义在类中的具有特定功能的一段独立小程序。
函数也称为方法。函数的格式:
饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,){ 执行语句; return 返回值;}
返回值类型:函数运行后的结果的数据类型。跟返回值的数据类型有关系。 如果没有返回值的话,则使用void
- 方法名称:其实就是功能的名称, 那么名称可以根据功能来定义。不要使用aaa、bbb等不明确的名称
- 参数类型:是形式参数的数据类型。
- 形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
当在逻辑中 含有未知的数据参与 运算的时候 才需要参数列表
(实际参数:传递给形式参数的具体数值。) - return:用于结束函数, 将返回值 返回给调用者。
当没有返回值的时候 ,我们可以直接写 return ; 即可,但是此种情况 通常可以省略不写。 - 返回值:该值会返回给调用者。
- 案例:
- 用于计算两数之和,两个数是否相等,乘法表
- 定义方法用于输出换行
需求1: 定义一个功能,完成两个整数的和的获取。
思路:既然定义功能,就是可以用函数来体现。 如何定义一个函数呢? 通过两个明确来完成。明确一:这个功能的结果是什么? 是和。是功能的结果,所以该功能的返回值类型是int 。 其实就是在明确函数的返回值类型。明确二:这个功能实现过程中是否需要未知内容参与运算? 有,加数和被加数。这就是函数的参数列表(参数的个数,参数的类型) 其实就是在明确参数列表。注意:返回值类型和参数类型没有直接关系。*/public static int add(int a,int b){ int sum = a+b; return sum;}
需求2: 定义一个功能,比较两个数是否相等。
明确一:这个功能的结果是什么? 有,boolean.明确二:这个功能实现过程中是否需要未知内容参与运算? 有,两个整数。 public static boolean equals(int a,int b) { /* if(a==b) return true; else return false; boolean x ; if(a==b) x = true; else x = false; return x; */// return (a==b)?true:false; return a==b;}
需求3: 定义功能,打印99乘法表。
public static void print99(){ for(int x=1; x<=9; x++) { for(int y=1; y<=x; y++) { System.out.print(y+"*"+x+"="+y*x+"\t"); } System.out.println(); }}
注意问题:
1、方法要定义在类中 2、和顺序无关 3、不可以在方法里 再定义方法 4、可以在方法里 调用其他的方法
局部变量与全局变量,this关键字的作用
局部变量
- 定义在类的方法内或代码块内的变量
- 局部变量只在定义它的方法体内或代码块内有效
- 局部变量在使用之前,必须先初始化
全局变量(成员变量)
- 一个类中既不在方法体内也不在程序块内定义的变量
- 类中所有的方法和代码块都可以访问成员变量
- 对于没有初始化的成员变量,系统会指定默认的值
成员变量的默认初值
this关键字
当成员变量和局部变量重名,可以用关键字this来区分。//仅仅是this的一个表现形式
this : 代表对象。代表哪个对象呢?当前对象。
this就是所在函数所属对象的引用。
简单说:哪个对象调用了this所在的函数,this就代表哪个对象this也可以用于在构造函数中调用其他构造函数。
注意:只能定义在构造函数的第一行。因为初始化动作要先执行。凡是被对象调用的东西 比如属性或函数 它们都持有一个this引用
重载(overload)
- 重载的概念
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。 - 重载的特点:
与返回值类型无关,只看参数列表。 - 重载的好处:
方便于阅读,优化了程序设计。 重载示例:
//返回两个整数的和 int add(int x,int y){return x+y;}//返回三个整数的和int add(int x,int y,int z){return x+y+z;}//返回两个小数的和double add(double x,double y){return x+y;}
总结:重载特点,两同三不同
构造器(构造方法)
通过构造器用于构造该类的对象。Java通过new关键字来调用构造器,从而返回该类的对象。是一种特殊的方法:
[修饰符] 类名 (参数列表){ //n条语句}
1、构造器没有返回值类型
- 2、方法名称要和类名保持一致
- 3、一个类中可以有多个构造器,但是参数列表不同:参数的顺序不同、参数的类型不同、参数的个数不同
- 4、构建类的对象 通过new关键字 例:Mobile stu=new Mobile();
- 5、系统会自动添加一个无参的构造器
- 6、当含有有参的构造器时 会把默认的无参的构造器干掉
- JavaSe基础(6)-- 方法
- JavaSE----基础语法(方法)
- JavaSE基础(一)
- JavaSE基础(二)
- JavaSE基础(三)
- JavaSE基础(四)
- JavaSE基础(五)
- JavaSE基础(六)
- JAVASE基础(一)
- JAVASE基础(二)
- JAVASE基础(三)
- JAVASE基础(四)
- JAVASE基础(七)
- JAVASE基础(八)
- JAVASE基础(九)
- JAVASE基础(十)
- JAVASE基础(十一)
- JAVASE基础(十二)
- 给定一个入栈顺序,输出所有的出栈顺序
- OpenStack入门 之 初步了解
- 直方图均衡化
- 自定义水平进度条(颜色)
- Educational Codeforces Round 10 B. z-sort
- JavaSe基础(6)-- 方法
- 利用 Composer 一步一步构建自己的 PHP 框架(三)——设计 MVC
- 使用eclipse或者myeclipse时,鼠标变成黑色十字架解决办法
- HTML压缩(JSP的GZIP实现)
- 保存今天的代码
- nginx配置python的cgi
- 如何查看iOS已上架app崩溃分布、定位crash发生的行
- 关于在myeclipse中导入工程所遇到的问题,解决办法
- iReport 制作报表时需要注意事项