在开始之前说明一下,本篇文章所使用类和上一篇使用的类相同,主要是懒,不想再写一个新的类了o(* ̄▽ ̄*)o,顺便将之前挖的关于访问修饰限定符和static的坑给填上
目录
1.封装
1.1概念
封装是面向对象程序的特性之一,主要是将数据和操作数据的方法进行结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互
简单来说就是类的一些实现细节我不想让别人知道,所以将那些细节屏蔽
1.2封装的实现
1.2.1访问修饰限定符
Java中类的封装主要就是通过访问修饰限定符来实现,访问修饰限定符可以控制成员变量或成员方法能否直接在类外进行使用,Java中一共有4种访问修饰限定符
public:公共的,修饰的成员变量和成员方法可以在任何地方使用;之前有提到过public修饰的类,类名要和文件名相同
private:私有的,修饰的成员变量和成员方法只能在自己所在的类当中使用
protected :受保护的,这个不是类和对象的重点,暂时跳过
default:包访问权限,同一个包中可以使用,变量或方法没有加访问修饰限定符默认是包访问权限
我们现在将类里面的成员变量全部换成private修饰,其它内容不变:
class Book {
private String name;
private String author;
private int price;
public void show() {
System.out.println("书名:"+name);
System.out.println("作者:"+author);
System.out.println("价格:"+price);
}
public void setBook(String name,String author,int price) {
this.name=name;
this.author=author;
this.price=price;
}
public Book(String name, String author, int price) {
this.name = name;
this.author = author;
this.price = price;
}
}
我们使用对象初始化成员变量看看结果是什么:
此时对象便无法直接访问成员变量了,但我们可以通过自己写的初始化成员变量的成员方法或者构造方法来进行初始化
如果真的需要获取某个成员变量的数据的话,我们同样可以定义方法来实现
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
public int getPrice() {
return price;
}
2.包
在面向对象体系中,提出了一个软件包的概念,将多个类收集在一起成为一组,称为软件包,这样做的目的是便于管理。就像图书馆里面的书,一本书就是一个类,书按照内容进行分类,文学方面的书放在一个书架、历史方面的书放在另一个书架,这些书架就是包
上面提到的包访问权限就是变量或方法只要在包里面,即使是不同的类也可以使用
包的另一个作用:不同的两个包允许有相同名称的类
Java中有很多自己的包,比如之前在数组里面提过的import java.util.Arrays;util就是一个包,Arrays是包里面的一个类,从这也可以看到包的使用方法:通过import来导入
当然你依旧可以对包中的类进行实例化后再使用,但过于麻烦
我们也可以自定义一个包,需要注意以下几点:
1.文件最上方加上一个 package 语句指定该代码在哪个包中,如果没有 package 语句, 则该类被放到一个默认包中
2.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式3.包名要和代码路径相匹配
3.static修饰的成员
被static修饰的成员变量和成员方法称为类变量和类方法
3.1类变量和类方法的特点
它们和未加static修饰的成员变量和成员方法的区别如下:
1.存储位置不在堆中的对象里面,而是在方法区,即类变量和类方法是不依靠对象的
2.类变量和类方法是所有对象共享的
3.可直接通过类来访问,虽然也可以通过对象来访问,但不合理,所以不建议
4.普通成员方法里面可以访问类变量和类方法,反之却不行
5.类变量只能在方法外定义
通过第4点可以解释为什么main方法如果要像C语言那样直接调用其它方法,其它方法需要使用static修饰,如果不使用static修饰,那么只能实例化对象后用对象来调用了,而main方法使用static修饰是Java语法规定
3.1类变量初始化
通过类可以进行初始化,成员方法和构造方法因为可以访问类变量同样可以进行初始化,还有一种则是通过代码块
3.1.1代码块
代码块就是使用“{}”定义的一段代码,根据代码块定义的位置以及关键字可以分为四类:
普通代码块:定义在方法中的代码块
实例代码块:定义在类中的代码块,一般用于初始化实例成员变量,且实例代码块优先于构造方法执行
静态代码块:使用static定义的代码块,一般用于初始化静态成员变量,只执行一次同步代码块:涉及到多线程的内容,暂时跳过
类变量的初始化还可以通过静态代码块来实现
我们把Book类里面的成员变量都用static修饰:
class Book {
public static String name;
public static String author;
public static int price;
static {
name="边城";
author="沈从文";
price=50;
}
}
然后直接使用类来访问
本篇到这结束,类和对象的内容应该会在下一篇结束,完