分类思想

分类思想主要是通过分工协作的方式,让专人做专事。

分包思想

包是什么?包就是文件夹。

创建包的注意事项:1.多级包之间使用“.”分割  2.多级包的定义规范应该是你所在公司的域名去掉www.之后进行反转得到的(例如:河南大学的网址是:http://www.henu.edu.cn)我们进行创建包的时候包的结构应该是cn.edu.henu.(你要创建的包名)

3 包的名字中必须是小写字母

在idea中创建一个包后并在包中创建一个类后,类中的第一行非注释代码必须是类所在的包(idea会自动生成的)。

类与类之间的访问

同一个包下的类不需要进行import导包,可以直接使用

不同包下有两种访问方式

  1.通过import导包后访问

  2.通过全类名(你定义的包.你定义的类)访问

  比如你定义了a包,b包,两个包中都有Student类

  在a包中正向调用b包的方式应该是

  b.Student student=new b.Student();

要注意的是此时不能使用import导入b包。

一般在开发一个项目时将src下的包分为五个:entry   controller service dao domain

entry 包下的类是程序的入口类,提供main方法。

controller包下的类负责接受和反馈用户信息,就是和用户打交道。也可以说是客服接待

service包下的类主要进行业务的逻辑处理,比如增删改查中,你要增,你要看是不是重复了。在这里进行逻辑判定

dao包下的类是真正处理数据存储的类,可以进行增删改查等等操作。

domain中的类封装用户的信息

值得一提的是尽量要提高代码的复用性和可维护性,比如controller包下的类调用service包下的类时,如果在每一个方法中使用new创建对象不仅使代码冗长,此时若不用static修饰数据存储结构的话,更会导致每次调用方法都会初始化,导致数据存储后下一次访问得到的存储结构为空。由此可得,尽量将代码中new对象的部分放在方法外。

Static关键字

static的意思是静态,是java中的修饰符之一,可以修饰成员方法,成员变量

被static修饰的成员变量,一般叫做静态变量,被static修饰的方法叫做静态方法。

static的特点是

1.被类的所有对象所共享 是我们判断是否使用静态关键字的条件

2.随着类加载而加载,优于对象存在 对象需要类被加载后才能创建

3.多了一种调用方式,可以通过类名调用

例如:Student类中存在static string name的静态变量,调用时可直接通过Student.name调用,也可以 Student student=new Student(); student.name调用。

在堆内存中存在一个静态存储位置来存放静态成员和静态方法。

继承

继承是什么?可以理解为父子关系,若一个类继承父类,则称为这个类是被继承类的子类

例子: public class Zi extends Fu()

为什么要继承?继承的好处?

多个类中存在共性的关系,向上抽取共性内容为父类,可以提高代码的复用性,提高代码的维护性,让类与类之间产生了关系,是多态的前提

子类能访问父类中的什么?

子类可以直接使用父类中的非私有成员。

继承的缺点?

继承是侵入性的,子类必须拥有父类的非私有成员和方法,对子类产生了约束,若父类删除了某个方法或属性,调用子类的继承而来的这个方法或者属性将编译错误。

综上所述,继承增加了代码的耦合性,降低了代码的灵活性。

一个子类只能有一个父类,但是这个子类的父类可以是另外一个类的子类

也就是说,java支持多层继承,不支持多继承。

就近原则

子类变量访问是根据就近原则来的。

优先在子类的局部范围内找,之后再在子类的局部范围内找,最后再在父类范围内找。

继承中的成员方法调用与变量调用一致,都遵循就近原则。

一个java类即使没有标明父类,例如 Public Student Class{},这个类也是存在父类的,这个父类就是Object类。

关于this和super

this关键字代表本类对象的引用 ,super代表父类对象的引用。

方法重写

一个子类难道只能使用父类给的方法吗?除了写新的方法外,还可以对方法进行重写。

重写应用场景

当子类需要调用父类功能,而子类的某个方法希望加以改变,此时就可以进行重写,既继承了父类的非私有方法,又有特有的功能实现。

重写与重载的区别

方法重写:在继承体系中,子类出现了和父类一模一样的方法声明时(方法名,参数列表,返回值类型)

方法重载:   在同一个类中,方法名相同,参数列表不同(参数个数,参数类型,参数顺序),和返回值无关

重写的注意事项

父类的私有方法不能被重写

静态方法不能被重写,但是如果子类定义了一模一样的静态方法时,此时子类将父类中同名的方法隐藏了起来,达到了重写的效果,但是这并不是重写。

非静态方法必须由非静态方法重写,静态方法可以通过上文说的步骤实现重写效果,但是并不是重写

子类重写父类时,子类的访问权限必须大于或者等于父类。(访问权限:public>protected>默认>private)

继承中构造方法的访问特点

子类中所有的构造方法都会默认访问父类中的无参构造,但是此时父类中只写了有参构造,没有写无参构造的话,此时子类会出现编译错误。(务必写两种构造方法,省的麻烦)

为什么?

子类在初始化的时候有可能会用到父类中的数据,如果父类尚未完成初始化,子类将无法访问父类的数据。

子类初始化之前,一定要先完成父类初始化

如何初始化?

构造方法的第一条语句默认是super();就像不写构造方法会默认给一个无参构造方法一样。

那么在内存中是怎样的呢?

例如这里有三个类:                       

 

public class Person {//父类
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String name) {
this.name = name;
}
public Person() {
}
private String name;
}
---------------------------------
public class Student extends Person{//子类
private String sex;
public Student(String name, String sex) {
super(name);
this.sex = sex;
}
public Student() {
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
--------------------------
public class Test {//测试类
public static void main(String[] args) {
Student student=new Student("朔月","男");
}
}


此时在对内存中父类的私有成员存在吗?当然存在了,子类的存储空间中不止自己成员存储空间,还有分类成员存储空间(私有也是有的,即使无法访问,但是已存在),此外,由于父类默认继承了Object类,此时子类的存储空间中的父类成员存储空间中还有着Object雷的成员存储空间。

abstract

abstract是抽象的意思

抽象方法定义格式为

public abstract 返回值类型 方法名(参数列表);

抽象类的定义格式为

public abstract class类名{}

抽象类不能实例化,抽象类不一定有抽象方法,有抽象方法的一定是抽象类,抽象方法可以有构造方法,抽象类的子类要么重写抽象类中的所有抽象方法,要么自己也变成抽象类(不推荐)

模板设计模式

就是给一个模板去完成,抽象类中以非抽象内容和抽象方法组合完成,使用者只需要关注自己要实现的内容即可,其他的都是模板

 

final

final关键字是最终的意思

修饰方法时,这个方法不能被重写,这个方法被称为最终方法

修饰变量时,表明该变量是常量,不能再次赋值

修饰类时,这个类不能被继承,这个类是最终类

其中final修饰基本类型时,基本类型的数据值不能发生改变,被final修饰的基本类型的命名要全字母大写,中间用_隔开。例如final int  MAX_VALUE=100;

final修饰引用类型时,引用类型的地址值不能改变,内容可以改变。

final修饰成员变量时,要么一开始直接赋值(推荐),要么在构造方法中赋值。