封装和关键字static
面向对象的三大特性:封装、继承、多态。(第四个:抽象)
1、面向对象和面向过程的编程思想和编程方式
2、了解了生活中的类和对象
3、程序中如何从生活中抽象出类和对象
4、Java中类和对象的使用
5、方法:面向过程的核心
5.1、方法的分类 ( 有4种)
5.2、方法的使用
5.3、构造方法
5.4、this
5.5、方法的重载
5.6、成员变量和局部变量的区别
一、理解封装的作用
1.可以有效解决不合理赋值的问题。
例如:玩游戏领宝宝,里面有亲密值一项,但是这个亲密值最大是100 ,但你输入大于100 或者是负数都能够成立,那这就是系统的Bug了。出现了不合理赋值的情况。
2.可以降低程序之间的耦合性。(牵连小)
(个人理解:其实就是在一后敲代码的时候出现一个Bug的时候,修改Bug时不用牵连到全部/大部分的代码的修改。)
3.可以提升代码的复用性。
4.降低了大型系统的风险。
二、掌握封装的使用**
1.降属性私有化(添加private修饰符)
/* 名字 public 公共的*/
public String name;
/* 健康值 private 私有的*/
private int health;
2.给属性提供对应的公共的(public)getter/setter方法
// Alt+Shift +S -> r + Alt+A全选 -> Alt+r确认生成
public void setHealth(int health) {
this. health = health;
}
public int getHealth() {
return this. health;
}
3.根据需求在对应方法中添加逻辑控制语句
public void setHealth(int health) {
// 添加逻辑控制语句
this. health = health;
}
public int getHealth() {
return this. health;
}
合理的Java Bean 规范(扩展)
1.属性私有化
2.提供公共的getter和setter
3.提供无参构造
4.实现序列化接口 serializable
/**
* Java Bean规范
*/
public class Student {
private String name;
private int age;
private char gender;
// Alt+Shift +S -> r + Alt+A全选 -> Alt+r确认生成
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void stu(char gender) {
this.gender = gender;
}
/* 无参构架方法,在调用getter和setter也一定要调用出这个,
后续会使用到*/
public stu() {
super();
}
三、会使用Java的包来组织类
package
公司域名的倒序,包名全部是小写。
为什么使用包:
因为在同一个文件夹下,是无法存放多个同名文件内容。
因为在同一个文件夹下,如果所有文件都放在一起,无法有效的进行区分和查找。
可以根据包来定义访问权限。
模仿了windows等系统的树形结构目录。
如何使用包:
在定义好包后,如果在包下定义类,类中一定要在有效代码的第一行添加packa包声明。
如果在不同包中使用某个类:
那么一定要在使用类中声明包的导入语。import要引入的类地址;例如:使用Scanner、Arrays
如果不这样做,JVM无法确认该类型的地址,也无法区分多个同名类型。
import导入包声明,需要放在package声明下,类声明上的位置,它们之间的位置顺序固定。
java.lang
包下的内容不需要手动导入!例如:System、String
例如:
package can.kgc. demo1;
// 导入时 可以使用精细导入(全类名 / 全限定名 / 全/类路径) 也可以使用批量通配导入
inport java .util.Scanner;
public class Test{
}
包package
可以用于在一个项目中出现多个重名的类文件。
可以用于在一个项目中更清晰的对类文件进行区分。
可以用来做访问权限控制。
如果在包下定义类,那么此类中应该进行包声明。
如果两个类在同一个包中,可以直接使用。
如果两个类在不同包中,必须要先导包才能使用。(java.lang包下的类无需导入)
原因:因为不同包中可能有重名的文件,如果不指定类路径/全类名(cn.kgc.Test),编译器无法区分。
import 要导入的类的全类名/全限定名/类路径。
注意:
如果在一个类中使用到了两个不同包的同名类,那么必然有一个是需要以全类名形式使用的。
cn.kgc.demo1.Test1 test1 = new cn.kgc.demo1.Test1();
包的命名规范:
公司域名的倒序,包名全部小写。
例如:在腾讯(www.tencent.com)的通讯部 做微信开发
com.tencent.部门名称.weixin.*****(不同公司的包命名方式会有出入)
4、理解和掌握使用访问修饰符
public(公共的)在整个项目中都能用
private(私有的)只能在同一个类中使用
默认/包级访问修饰符(default/friendly)什么也不加就是默认访问修饰符 , 只能在同一个包中使用
。
protected受保护的,和继承中的子类和父类有关。
它们可以用来修饰类、方法、属性…
public class 类名{
public class name;
public void show(){
}
}
5、static关键字
static 静态的
pablic static void main(String[] args){
}
1、static修饰的信息是属于类的,它是随着类的加载而加载的。
2、我们没有被static修饰的信息是非静态/实例的,多个示例/对象之间的信息是相互隔离。而static修饰时被多个实例共享。
3、被static修饰的信息可以直接采用类名.的形式来调用,也可以使用对象来调用(不推荐)
构造方法、静态代码块、成员代码块的加载顺序
static可以用来修饰属性、方法,还可以用来修饰代码块。
静态代码块 -> 构造代码块 -> 构造方法
静态代码块先进行加载,只会加载一次。
成员代码块每一次创建对象都会执行,优先于构造方法。
构造方法随着对象的创建而执行。