一、面向对象的三大特征:
-
封装
-
将类的某些信息隐藏在类内部,不允许外部程序直接访问
-
只能通过该类提供的方法来实现对隐藏信息的操作和访问
-
隐藏对象的信息
-
留出访问的接口
-
特点:
-
只能通过规定的方法访问数据
-
隐藏类的实现细节,方便修改和实现
-
-
实现步骤
-
第一步:修改属性的可见性:设为 private
-
第二步:创建 getter/setter 方法:设为 public 用于属性的读写
-
第三步:在 getter/setter 方法中加入属性控制语句:对属性值的合法性进行判断
-
Cat.java 中的代码
/** * 宠物猫类 */ public class Cat { //修改属性的可见性----private,限定只能在当前类内访问 //成员属性:昵称、年龄、体重、品种 private String name;//昵称 private int month;//年龄 private double weight;//体重 private String species;//品种 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMonth() { return month; } public void setMonth(int month) { if (month <= 0) { System.out.println("输入信息有误,宠物猫的年龄必须大于0"); return; } this.month = month; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } public Cat(){ System.out.println("我是一个无参的构造方法"); } public Cat(String name,int month,double weight,String species) { this(); this.name = name; this.setMonth(month); this.weight = weight; this.species = species; } //成员方法:跑动、吃东西 //跑动 public void run(){ System.out.println("小猫会跑"); } //吃东西 public void eat() { System.out.println("小猫吃鱼"); } }
-
CatTest.java 代码
public class CatTest { public static void main(String[] args) { //对象实例化操作 Cat cat = new Cat("花花",3,1000,"英国短毛猫"); System.out.println("年龄是:"+cat.getMonth()); //测试 cat.eat(); cat.run(); } }
输出结果如下:
我是一个无参的构造方法
年龄是:3
小猫吃鱼
小猫会跑 -
-
访问修饰符
-
除了private、public,还有什么呢?
-
访问权限是怎么样的?
-
注意:
-
只有 getXXX 方法的属性是只读属性;
-
只有 setXXX 方法的属性是只写属性;
-
-
-
-
继承
-
多态
在 Java 中如何进行不同类文件的管理的呢?
-
包
-
创建
- 命名:域名倒序+模块名称+功能名称
-
作用
-
管理Java文件;
-
解决同名文件冲突:Java中一个包里不能存在同名类。
-
-
定义包
package com.模块名称.功能名称;//命名方式
Ps:
-
必须放在 Java 源文件中的第一行;
-
一个Java源文件中只能有一个package语句;
-
包名全部英文小写
-
命名方式:域名倒序+模块+功能;
-
-
如何实现跨包的类调用
-
语法:import 包名.类名;
-
导包有三种方式,如下:
如下图所示://通过 import 关键字导包,加载com.animal 下所有的类 (1)import com.animal.*; //通过 import 关键字导包,加载指定包下指定的类 (2)import com.animal.Cat; //在代码中直接通过包名.类名的方式引用要用到的类 (3)com.animal.CatTest text = new com.animal.CatTest();
05类加载的顺序.png
-
当不同的包存在相同类名的类(如上图中多个包存在相同类名的类 Cat 类),并且被导入到同一个java文件时,加载类的顺序跟 import 导入语句的位置无关。由于第二种包名.类名的加载类的方式会更清晰,因此程序会优先以第二种方式加载导入的类。如上图,虽然 machanics 包和 animal 包都有 Cat 类,但是可以看到,Test 测试类在程序编译后导入的类是 animal 下的。如果需要加载 machanics 下的 Cat 类,就需要使用第三种方式。
-
com 包里面包含多个子包 animal 和 mechanics,不能直接通过“ import com.;* ”语句一次性导入多个子包中所有的类。import 语句只能用于导入一个包下一个或多个 java 文件对应的类,不能用于导入一个包下的还有子包的情况。
-
-
-
Tips: 常用系统包
-
java.lang:包含 Java 语言基础的类,该包系统加载时默认导入如:System、String、Math
-
java.util:包含 Java 语言中常用工具,如:Scanner、Random
-
java.io:包含输入、输出相关功能的类,如:File、InputStream
static 关键字
-
在 Java 程序中可以和哪些信息组合使用?
-
static 可以修饰属性、方法。
-
static 不能用来修饰类。类的修饰符只允许是:public、abstract 和 final
-
static 不能用来修饰局部变量。
-
-
用它修饰的信息具有哪些特征 呢?
-
static + 属性:称为静态成员、类成员
-
类对象共享
-
类加载时产生,销毁时释放,生命周期长
-
-
static + 方法:称为类方法, 静态方法
-
static + 类:不存在
-
static + 方法内局部变量:不存在
静态成员随类的加载而产生,直至类的销毁才回收。
-
-
调用方式
-
类名.静态成员;
Cat.静态成员
-
对象名.静态成员;
(1)Cat cat = new Cat(); cat.静态成员; (2)this.静态成员;(this表示当前对象)
-
可以直接调用静态成员;
-
静态方法中不能直接访问同类中的非静态成员
-
静态方法中不能使用 this
-
可以通过实例化对象后,以对象调用的方式完成非静态成员的调用。
-
代码块:
-
语法:通过 {} 可以形成代码块
-
分类:
-
普通代码块:直接定义在成员方法中的代码块。
-
构造代码块:直接定义在类中的代码块。
-
静态代码块:当构造代码块前面加上 static 关键字时,该构造代码块会升级为静态代码块。
-
-
代码块的调用执行:
-
单独使用的情况
-
普通代码块
- 特点:每次调用方法的时候顺序执行,先出现先执行;
-
构造代码块
- 特点:每次创建对象时都会调用
-
静态代码块
- 特点:类加载的时候执行,并且只会执行一次。
-
-
当一个类同时存在构造代码块和静态代码块:
-
静态代码块的执行顺序优于构造代码块,即静态代码块会首先执行。如果存在多个静态代码块,则按顺序执行,先出现先执行。
-
静态代码块执行完成后,才会执行构造代码块。构造代码块的执行顺序优于构造方法,即会在构造方法之前先执行。如果存在多个构造代码块,则按顺序执行,先出现先执行。
-
-
-
使用场景:
- 如果有些信息只希望在类加载的时候运行一次,则可以将它放入静态代码块中。
网友评论