目录
类和对象
1.什么是类
2. 对象的初始化及使用(this关键字)
3.封装的概念及应用(含Java中常见的包)
4.static关键字
5.代码块
6.内部类
Java 是一门纯面向对象的语言 (Object Oriented Program ,简称 OOP) ,在面向对象的世界里,一切皆为对象。 面 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。相比于面相过程,用面相对象的思想来进行程序设计,对于开发者更加友好,对于大型程序的设计,扩展,维护更有帮助。
在面相对象的思想中,我们需要把各种事物抽象成对象(也可以说是一个实体),类是用来对一个实体(对象)来进行描述的,在java中定义类时需要用到class关键字。在下面这段代码中,我们定义了一个洗衣机类:
class WashMachine{
public String brand; // 品牌
public String type; // 型号
public double weight; // 重量
public double length; // 长
public double width; // 宽
public double height; // 高
public String color; // 颜色
public void washClothes(){ // 洗衣服
System.out.println("洗衣功能");
}
public void dryClothes(){ // 脱水
System.out.println("脱水功能");
}
public void setTime(){ // 定时
System.out.println("定时功能");
}
}
这里面包含的内容成为类的成员,其中成员变量称为类的属性,成员方法称为类的行为。
tips:
在Java中定义了一个类,就相当于在计算机中定义了一个新的引用类型,与数组,String类似,不过前者是用户自定义的类型,后者是Java中内置的。
而对象就相当于用自定义类型声明的一个变量,用类类型初始化对象的过程,成为类的实例化。定义如下:
类名 对象名 = new 类名()//new后面跟的是类的构造方法。
下面是初始化一个日期对象的代码案例:
public class Date {
public int year;
public int month;
public int day;
// 无参构造方法
public Date(){
this.year = 1900;
this.month = 1;
this.day = 1;
}
// 带有三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}
在上述代码中我们可以看到构造方法中的变量名与类中的变量名重名了,为了区分两者,Java中引入了this关键字。
public Date (){//System.out.println(year); 注释取消掉,编译会失败this ( 1900 , 1 , 1 );//this.year = 1900;//this.month = 1;//this.day = 1;}// 带有三个参数的构造方法public Date ( int year , int month , int day ) {this . year = year ;this . month = month ;this . day = day ;}}
从开始学习Java到现在,相信你已经发现每段Java代码都少不了的一个关键字就是 public,而他就与我们要学习的封装概念有关。
public class Computer {
private String cpu; // cpu
private String memory; // 内存
public String screen; // 屏幕
String brand; // 品牌---->default属性
public Computer(String brand, String cpu, String memory, String screen) {
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
比特就业课
注意:一般情况下成员变量设置为private,成员方法设置为public。
6.3 封装扩展之包
6.3.1 包的概念
在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件
包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件
下,也可以对某个文件夹下的音乐进行更详细的分类。
this.screen = screen;
}
public void Boot(){
System.out.println("开机~~~");
}
public void PowerOff(){
System.out.println("关机~~~");
}
public void SurfInternet(){
System.out.println("上网~~~");
}
}
public class TestComputer {
public static void main(String[] args) {
Computer p = new Computer("HW", "i7", "8G", "13*14");
System.out.println(p.brand); // default属性:只能被本包中类访问
System.out.println(p.screen); // public属性: 可以任何其他类访问
// System.out.println(p.cpu); // private属性:只能在Computer类中访问,不能被其他类访问
}
}
上述关键字我们称为访问限定符,Java中提供了四种访问限定符分别是private,default,protected,public。
default即什么都不写时的权限。
为了更好的管理类,Java中引入了包(packet)的概念,即文件夹。
包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式 ,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可 。
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
可以使用import static导入包中静态的方法和字段:
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 静态导入的方式写起来更方便一些.
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}
Java中常见的包:
被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。可以通过类名直接调用,静态方法储存在下图中的方法区中。
tips:
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
- 实例代码块只有在创建对象时才会执行
在Java中可以将一个类定义在另一个类或者一个方法的内部,称为内部类。
public class OutClass {
class InnerClass{
}
}
// OutClass是外部类
// InnerClass是内部类
匿名内部类的书写形式:父类/接口 对象 = new 父类/接口(){ 重写父类/接口中的方法 };