封装
面向兑现的三大特征:封装(基础),继承,多态。(抽象)
1.面向对象和面向过程的编程思想和编程方式。
2.了解了生活中的类和对象
3.程序中如何从生活中抽象出类和对象
4.Java中类和对象的使用
5.方法:面向过程的核心
1.方法的分类 4大类
2.方法的使用
3.构造方法
4.this
5.成员变量和局部变量的区别
1.属性私有化(将属性的访问修饰符更改为private。
2.提供公共的getter和setter方法。
getter:是外界获取该属性值(get)
setter:外界给该属性赋值(set)
3.根据需求在方法中添加逻辑控制语句。
1.理解封装的作用
出现不合理赋值却语法成立原因:
1.health是int类型的,int类型的取值范围,int是Java默认的整数类型,负数是包含在这个范围内的。
(如果想更换数据类型来解决,发现其他的类型要么无法存储,要么也可以去负数)
2.虽然可以通过添加方法来进行赋值同时判断,但是因为health可以直接放访问赋值,不安全,有可能不去使用你自己定义的赋值方法
(因为变量无法直接赋值的同时进行判断,所以我们定义了方法,在赋值的同时进行了判断)。
//公共的public
public int healet;
//私人的private(给自己的数值加了一道防盗锁)只能在类中使用
private int healet;
//所去的健康值是0-100,现在是-10却不报错healet值为int
panda.sethealet = -10;
panda.love = 30;
panda.showMyself(){
syso(xxxx);
}
1.便于使用者正确使用系统,防止错误修改属性
可以有效解决不合理赋值的问题。
2.有助于系统之间的松耦合(低耦合),提高系统独立性。
可以降低程序之间的耦合性。
3.可以提高软件的可适用性。
可以提升代码的复用性
4.降低了大型系统的风险…
2.掌握封装的使用
1.将属性私有化(添加private修饰符)
2.给属性提供对应的公共的(public)getter/setter方法。
3.根据需求在对应的方法中添加逻辑控制语句。
合理的Java Bean规范
1.属性私有化
2.提供公共的getter和setter方法
3.提供无参构造
4.实现序列化接口 serializable
//规范,快捷键Alt + /(补全)
public class person implements Serializable{
private static final long serialVersionUid = 5206280412034862968L
private String name;
}
//快捷键:Alt + Shift + s---r---Alt + a---Alt + r(自动生成)
宠物商店案例
需求:
浩然宠物商店贩卖宠物狗和宠物猫
客户可以选择购买宠物狗或者宠物猫
客户可以选择狗和猫的品种
客服可以选择狗和猫的性别
最后打印购买狗和猫的属性
3.会使用Java的包来组织类
package
公司域名的倒序,包名全部小写。
为什么实用包:
因为在同一个文件夹下,是无法存放多个同名文件内容的。
因为在同一个文件夹下,如果所有文件都放在一起,无法有效的进行区分和查找。
根据不同的包来访问不同的权限。
模仿了windows等系统的树形结构目录
如何使用包:
在定义好包之后,如果在包下定义类,类中一定要在有效代码的第一行添加<u>package</u>包声明。
如果在不同包中使用某个类:
那么一定要在使用类中声明包的导入语句。<u>import</u>要引入的类地址;例如:Scanner,Arrays
<u>import</u>导入包声明,需要放在package声明下,类声明上的位置。
如果不这样做,JVM无法确认该类型的地址,也无法区分多个同名类型。
<u>java.lang</u>包下的内容不需要手动导入!例如;System,String
例如:
package cn.kgc.demo1;
//导入时,可以使用精细导入(全类名 / 全限定名 / 全/类路径),也可以使用批量通配导入*
import java.util.Scanner;
public static void main(String[] ager){
Scanner input = new Scanner(System.in);
}
包的命名规范:
公司域名的倒序,包名全部小写。
我在腾讯的通讯部(www.tencent,com),做微信开发
com.tencent.部门名称.weixin.****(不同公司的包命名方式会有出入,都有一定的规范)
4.理解和掌握使用访问修饰符
public 公共的,在整个项目中都能用,空心的绿色圆形
private 私有的,只能在同一个类中使用,实心的红色正方形
默认/包级访问修饰符(default/friendly) 什么也不加就是默认访问修饰符,只能在同一个包中使用,蓝色三角
Protected 受保护的,和继承中的子类和父类有关。
他们可以用来修饰类,方法,属性…
//一个java文件有且只有一个public修饰的类,被public修饰的类,要和java文件同名
public class 类名{
public String name;
public void show(){
}
//只能在同一个类中直接使用
private String name;
//在整个项目中都能使用
public int age;
//只能在用一个包中使用
char gender;
}
访问修饰符,例图:
5.static关键字(好好掌握)
static静态的
//类的信息是随着类的加载而出现
//实例信息是随着队形的创建而出现
public static int classId;
//实例变量
public String name;
//静态/非实例变量
//多个对象之间共享类信息,其中一个改变,会导致其他对象的值也会更改
public static void main(String[] ager){
}
1.static修饰的信息是属于类的,它是随着类的加载而加载的。
2.我们没有被static修饰的信息是非静态/实例的,多个实例/对象找之间的信息是相互隔离。而static修饰时被多个实例共享。
3.被static修饰的信息可以直接采用类名,的形式来调用,也可以使用对象调用(不推荐对象调用)。
加载顺序
1.static可以用来修饰属性,方法,还可以用来来修饰代码块。
2.静态代码块---->构造代码块—>构造方法
疑问:
当出现了父类,子类关系后
父类的相关代码块和方法,子类的相关代码和方法,加载顺序如何?
public String name;
public Student(){//构造方法
System.out.println(xxx);
}
public static int classId;
//每一次创建对象都会执行,优先构造方法执行
//代码块/构造代码块/成员代码块/非静态代码块
{
System.out.println(xxx);
}
//它随着类加载而出现,所以只会在【第一次创建对象时执行】,切第一个执行,优先于构造代码块和构造方法
//静态代码块
static{
System.out.println(xxx);
}
类和对象的概念:
类是从一群对象中抽象而出的一个模板
对象是基于类产生的一个实例个体。