目的
今天讲解的方法比较多,例如,间接调用对象里面属性的setter/getter方法和构造方法及其构造方法的重载;还有static修饰的属性及其方法。
封装
首先我们应该先明白Java里面封装的概念
封装:
所谓封装,就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过封装在数据外面的被授权的操作,才能够与这个抽象数据类型交互,即将属性和方法封装到类里面,通过添加访问修饰符来限制访问权限,以达到隐藏信息的目的)
封装的优点
1.良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
访问修饰符:
public:公共 外部可以直接访问这个属性/方法
private:私有的 不希望外部访问这个对象的一些属性和方法
protected:受保护的,该类及其子类的成员可以访问,同一个包中的类也可以访问,同一个包中的类也可以访问
对于private修饰的属性 不能直接调用 只能间接使用
方法1:setter/getter方法 。使用属性封装,通过增加数据访问限制,增加了类的可维护性
建议将setter/getter方法 定义放在类的最后面 避免干扰阅读
public class Text {
public static void main(String[] args){
Poker poker=new Poker();
poker.setNumber("jack");
System.out.print(poker.getNumber());
Poker pp=new Poker();
System.out.println(pp.getNumber());
System.out.println(pp.getColor());
}
}
class Poker{
private String number;
private String color;
public void setNumber(String number){
return number;
}
public String getColor(String color) {
return color;
}
}
方法2:构造方法。构造方法负责对象初始化工作,为对象的属性符适合的初始值。创建对象是,其类的构造方法确保在用户操作对象钱,系统保证初始化的进行。
每个类会默认提供一个构造方法
构造方法的特点 public
无返回值
方法名是类的名称
不需要加参数
形如:
public Poker(){
System.out.println("构造方法");
}
方法的重载
同一个类里面有多个同名的方法 但是返回值或参数不同
public class Text {
public static void main(String[] args){
Poker pp=new Poker();
System.out.println(pp.getNumber());
System.out.println(pp.getColor());
//自定义的
Poker pp2=new Poker("k","♥");
System.out.println(pp2.getNumber());
System.out.println(pp2.getColor());
}
}
class Poker{
//成员变量的作用域 从对象创建到对象被销毁
private String number;
private String color;
//类的构造方法
public Poker(){
number="2";
color="♠";
System.out.println("构造方法");
}
//构造方法的重载 重新写一个有参数的构造方法
public Poker(String number,String color){
this.number =number;
this.color=color;
System.out.println("自定义的构造方法");
}
}
另外我们可以看到我们使用了this关键字
1.在类的方法中使用this关键字代表的是调用此方法的对象的引用
2.我们可以用this处理方法中的成员变量和形参变量同名的问题
3.this可以看做当前被创建的对象
static关键字
static
可以修饰属性 静态属性
可以修饰方法 静态方法
修饰的属性和方法都会在对象创建之前加载
实例方法/实例方法:必须创建某一个对象 才能调用的方法
类方法/静态方法:不需要创建对象 直接用这个类来调用
什么情况下需要静态方法:工厂设计模式Factory/当不需要记录数据时
注意:静态方法里面不能够调用这个类的属性和非静态方法,因为在对象创建之前静态方法已经被加载,而非静态的方法可以访问静态的内容和非静态的内容
静态属性:
1.定义一个常量 只能赋值一次
2.单例设计模式
什么是单例设计模式?
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
具体实现
需要:
(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。
(3)定义一个静态方法返回这个唯一对象。
public class Text {
public static void main(String[] args){
//创建对象后调用
pp3.number="实例";
pp3.t1();
//直接调用
Poker.name="静态"
Poker.t2();
}
}
class Poker{
public String number;
public String color;
public static String name;
public static int age;
public void t1(){
System.out.print("实例方法");
}
public static void t2(){
System.out.print("静态方法");
}
}
其实前天我们还接触到了ArrayList方法,然后俺有点没听懂,于是百度了一下学习学习。
如果你要创建一个空的数组链表,用来存放String类型的对象,那么你可以像下面这样做:
ArrayList<String> list = new ArrayList<String>();
如果你需要创建一个指定初始容量的数组链表,你可以像下面这样做:
ArrayList<Integer> list = new ArrayList<Integer>(7);
初始化ArrayList的两种方法
方式一:
ArrayList<String> list = new ArrayList<String>();
String str01 = String("str01");
String str02 = String("str02");
list.add(str01);
list.add(str02);
方式二:
ArrayList<String> list = new ArrayList<String>(){{add("str01"); add("str02");}};
写在后面
这几天学习的方法有点多,都是需要记忆的内容,更是要运用到实践里,大家加油。