面对对象—封装
封装
将一个物品封装起来,外界不能直接使用,从而提高物品的安全性。
面对对象的三大特征:封装、继承、多态
什么是封装思想:
- 隐藏对象内部的复杂性,只对外提供公开,公共的接口与,便于外界调用,从而提高系统的可扩展性,可维护性、安全性、通俗的来说就把该隐藏的隐藏起来(细节),该暴露的暴露出来(对外提供的供别人使用的接口),这就是封装思想。
- *我们只需要调用这个接口(功能 )*即可,此接口背后封装的细节就开始执行,但是我们不需要关注细节,只关注公共接口怎么调用
- 将细节隐藏起来,不让外界随便使用,但是我们可以提供一个公共的接口让外接使用隐藏起来的细节–>封装思想
问题:
1、定义成员变量,只要是new出来的对象,就可以随便调用,随便赋值,哪怕是不合理的值我们也挡不住怎么办?将属性封装起来(隐藏细节)
a、关键字:`private`(私有化) //被private修饰的成员只能在本类中使用,在别的类中使用不了
b、注意: 将代码放到一个方法中,也是封装的体现。只不过`private`最具有代表性
c、private的使用
修饰成员变量: private 数据类型 变量名
修饰方法:将public改成private,其他的都一样
2、问题:属性被私有化了,外界直接调用不了,那么此时属性就不能直接赋值取值,所以需要提供公共的接口
get/set方法
set方法:为属性赋值
get方法:获取属性值
public class person {
private String name;
private int age;
//为name提供get/set方法
public void setName(String xingMing){
name = xingMing;
}
public String getName(){
return name;
}
//为age提供get/set方法
public void setAge(int nianling){
if (nianling < 0|| nianling > 100){
System.out.println("岁数不合理");
}else {
age = nianling;
}
}
public int getAge() {
return age;
}
}
public class test01 {
public static void main(String[] args) {
person person = new person();
person.setName("张三");
String name = person.getName();
int age = person.getAge();
}
}
小结:
- 用private将属性封装起来,外界不能直接调用,从而保护属性
- 对外提供一套公共的接口(set/get方法),让外界通过公共接口间接使用封装起来的属性
this介绍及使用
介绍:
如果成员变量和局部变量重名时,我们遵循”就近原则“,先访问局部变量
this概述:代表的是当前对象
作用:this可以区分重命名的成员变量和局部变量 this点出来就一定是成员的变量
问:this代表当前对象,那么具体代表哪个对象呢?
答:哪个对象调用的this所在的方法,this就代表哪个对象
public class person {
String name;
//哪个对象调用的this所在的方法,this就代表哪个对象
public void speak(String name){
System.out.println(this +"--------");
System.out.println(this.name+"您好,我是"+name);
}
}
public class test01 {
public static void main(String[] args) {
person person = new person();
System.out.println(person+"=========");
person.name="张三";
person.speak("李四");
System.out.println("=========");
person person1 = new person();
System.out.println(person1+"======");
person1.name="王二";
person1.speak("王二麻子");
}
}
构造方法
介绍
1、概述:方法名和类名一致并且能初始化对象的方法
2、分类:
a、无参构造:没有参数(重点)
b、有参构造:有参数、参数只为指定的属性赋值(重点)
c、满参构造:给所有属性赋值
3、特点:
a、方法名和类名一致、
b、没有返回值,连void的都没有
空参构造
1、格式:
public 类名(){
}
2、作用: new对象使用
3、特点:每个类中默认都有一个无参结构,不写也有,jvm会自动提供
4、使用:new对象就是在调用构造方法
有参构造
1、格式:
public 类名(形参){
为属性赋值
}
2、作用:
a.new对象使用
b.为属性赋值
3、特点:
jvm不会自动提供有参构造,但是将有参构造手写出来,jvm将不再提供无参构造,所以建议有参、无参的构造都手写上去
public class Person {
private String name;
private int age;
//无参构造
public Person(){
System.out.println("我是无参构造");
}
//有参构造
public Person(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class Test01 {
public static void main(String[] args) {
Person person = new Person();
Person person2 = new Person("涛哥", 18);
System.out.println(person2.getName()+"..."+person2.getAge());
}
}
- 如何快速知道调用的成员是哪个类中的哪个成员
- 按照ctrl+鼠标点击对应的成员变量——>会跳到对应位置
JavaBean
JavaBean
是java
语言编写类的一种标准规范,符合JavaBean
的类,要求:
- 类必须是具体的(非抽象 abstract)和公共的, public class 类名
- 并且具有无参数的构造方法,有参构造
- 成员变量私有化,并提供用来操作的成员变量的
set
和get
方法
public class person {
private String name;
private int age;
//无参构造
public person() {
}
//有参构造
public person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public class test01 {
public static void main(String[] args) {
person person1 = new person();
person1.setName("李四");
person1.setAge(10);
System.out.println("姓名"+person1.getName()+"年龄"+person1.getAge());
}
}
编写符合JavaBean
规范的类,以学生类为例,标准代码如下:
//快速生成标准javabean通用快捷键:alt+insert
public class Student {
private int sid;
private String sname;
public Student() {
}
public Student(int sid, String sname) {
this.sid = sid;
this.sname = sname;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
public class Test01 {
public static void main(String[] args) {
Student s1 = new Student();
s1.setSid(1);
s1.setSname("王三");
System.out.println(s1.getSid()+"..."+s1.getSname());
System.out.println("==============");
Student s2 = new Student(2, "李四");
System.out.println(s2.getSid()+"..."+s2.getSname());
}
}
小结:
- 知道private的作用吗?私有的,别的类不可以直接调用
- 知道空参构造作用吗?new对象
- 知道有参构造作用吗?new对象 为属性赋值
- 知道set方法作用吗?为属性赋值
- 知道get方法作用吗?获取属性值
- 知道this的作用吗?区分重名的成员变量和局部变量
- 如何快速生成标准
javaBean
吗? alt+insert
JavaBean怎么来的
将来的JavaBean
都是和数据库的表相关联
类名 ——> 表名
属性名 ——> 列名
对象 ——> 表中每一行数据
属性值 ——> 表中单元格中的数据