目录
5、定义标准的 POJO 类 domain 业务域 entity 实体bean, javabean
面向对象
一、封装
如果类当中有一些成员不希望被外界直接访问,那么可以使用private关键字进行修饰,从而达到确保数据安全的目的。
private是私有的意思,可以修饰属性和方法。
被它修饰的属性和方法只能在本类中使用,不能在其它类中使用。
定义私有属性:
使用private修饰属性的格式,在数据类型的前面加private关键字,格式为:
private 数据类型 属性名;
定义私有方法:
使用private修饰方法,在返回值类型前面添加private关键字,格式为:
private 返回值类型 方法名(形参列表){
方法体
}
为什么把方法定义成私有的?
在设计方法时,就已经想好了,这个方法只允许在这个类中被调用,不允许在其它类中调用.
封装后的属性将不能直接访问?那么如何访问?
每个被封装的属性,都应该提供相应的set和get方法(setter/getter)
public class Person {
private int id;
private String name;
private int age;
public void setId(int x){
id = x;
}
public int getId(){
return id;
}
public void setName(String str){
name = str;
}
public String getName(){
return name;
}
public void setAge(int x){
if(x<0){
System.out.println("你的赋值不合适,已经把年龄默认设置为18了");
age = 18; // 当非法赋值时,赋age为18
}else{
age = x;
}
}
public int getAge(){
return age;
}
public void eat(){
System.out.println("吃饭....");
}
}
private的含义
private是一个权限修饰符,代表最小权限。
可以修饰成员变量和成员方法。
被private修饰后的成员变量和成员方法,只在本类中才能访问。
封装的好处
隐藏了类的具体实现
操作简单
提高对象数据的安全性
二、构造方法
1、构造方法的概念
又称为构造器,C++称为构造函数,Java中称为构造方法或构造器。
2、构造方法的定义格式
修饰符 类名(参数列表){
方法体
}
3、构造方法的特征
名字必与类名相同。
参数可有可无,可多可少。
没有返回值,也不是void。
new 的时候被自动调用。创建对象时自动调用
public class Student {
private int id;
private String name;
private int age;
private String address;
public Student(){
//System.out.println("Student对象创建了");
}
}
4、构造方法的作用
1.创建对象
2.初始化对象:初始化属性
注意事项:
1.如果没有在类中定义构造方法,编译器会自动在编译阶段给类添加一个无参的构造方法.
2.如果在类中定义了构造方法,不管定义的构造方法是什么样的,也不管定义了几个构造方法,编译就不会自动给类添加无参的构造方法了,在创建对象时只能调用自己添加的构造方法了。
在开发时,一般都是在类中定义一个无参和一个满参构造方法。
在一个类中可以定义多个构造方法,以进行不同的初始化。多个构造方法存在于类中,是以重载的形式体现的。因为构造方法的名称都相同。
5、定义标准的 POJO 类 domain 业务域 entity 实体bean, javabean
POJO: Plain Of Java Object简单的java对象。
类中需要写如下内容:
1.属性都定义成私有的,给属性添加setXxx(xxx)和getXxx()方法,这两个方法都是用public修饰的;
2.给每个私有属性提供一对getter setter方法;
3.提供一个无参的构造方法和满参的构造方法;
6、基本布尔类型的Getter方法
isXxx()
三、初始化代码块
类似构造方法,也是用来初始化对象的成员变量的。
{
初始代码块
}
优先于构造方法被执行.
每次调用构造方法时都会先执行.
构造方法已经能初始化对象了为什么还要有初始化块啊?
初始化块初始化对象的时期优先于构造方法,所以当多个构造方法拥有同样的初始化语句时,可以把该语句统一提到初始化块中定义,以免相同的初始化语句分散到各个构造方法中引起代码重复、凌乱。
class Student {
{ // 初始化代码块——在创建对象时,自动调用 -----在构造方法之前执行,所以可以将多个构造方法中相同的代码放入代码块中
//System.out.println("初始化代码块<<<<>>>>>");
System.out.println("Student对象创建了");
}
public Student(){
//System.out.println("Student对象创建了");
}
public Student(int a,int b){
//System.out.println("Student对象创建了");
}
public Student(int a,String str1,int b,String str2){ //构造方法重载(overload)
//System.out.println("Student对象创建了");
id = a;
name = str1;
age = b;
address = str2;
}
}
四、实例对象 实例属性 实例方法
实例对象:(简称 实例)
使用类new出来的对象。
比如:
Person p = new Person();
实例属性:
存储在实例对象里面的属性,是属于实例对象的,需要通过实例对象访问这些属性。
格式:
实例对象名.实例属性名;
实例方法:
返回值 类型前面没有static关键字的方法叫实例方法。
public 返回值类型 方法名(形参列表){
方法体
}
是存储在实例对象中的,属于实例对象。
与实例属性一样, 在每个实例对象中都存储了一份。
要通过实例对象调用实例方法。
格式:
实例对象名.实例方法名(实参列表);
五、this关键字
1、this的含义
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
记住 :方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
this,当前对象的默认引用。(调用这个方法的对象的引用)
2、this使用格式
this.成员变量名;
public class User {
private int id;
private String name;
private int age;
public void setId(int id){ // 成员变量和方法参数同名
this.id = id;
//this.id 成员变量 id 方法参数
}
public int getId(){
return this.id;
}
}
3、调用构造方法
在一个类中,其中一个构造方法调用其他构造方法可以使用this关键字。
格式:
this() 或 this(参数)
注意:调用时,必须放在构造方法的第一句
public User(int id,String name,int age){ //构造方法重载
this(); //必须放在第一行
System.out.println("User类的三个参数的构造方法");
this.id = id;
this.name = name;
this.age = age;
}
4、作用总结
1、调用成员变量,用来解决成员变量和局部变量同名的问题。
2、调用方法,简化代码编写(IDE工具代码提示功能)。
3、在构造方法中调用其他构造方法。(注意:在构造方法中调用其他构造方法时,this语句必须方法在第一句)