面向对象
java面向对象的设计中有三大特性:
- 封装性:程序内部的处理结构对外不可见(结构内部不可见、实现结构不可见)
- 实现结构不可见:不同的层之间进行处理的时候可以完全不知道具体的实现细节;
- 内部结构不可见: 内部的相关的核心定义,外部 无法直接访问,这与访问权限相关。
- 继承性:在先人的基础上继续发展,就好比如果参考进化论,每一代都要比上一代要强。利用击沉给的结构划分出不同的类关系,同时保证一些公共的特征存留下来。
- 多态性:多态是一种不确定的执行模式,同样的一个功能不同的人干,会有不同的方法,但是最终的目的都是在解决核心的问题;
在每一个类之中都会有相关的属性和行为(方法),例如:每一个人都有姓名、年龄、等属性,这些都可以详细地定位到不同的人特点。所谓的行为描述的就是类的功能,例如汽车可以跑,描述的是类的功能,所有的对象都可以去调用类中定义的功能。
根据以上的分析可以得出如下的两条重要设计结论:
- 在进行面向对象设计之中一定要先进行类结构的定义,而后才可以拥有具体的对象,对象时可以直接使用的操作;
- 一个类可以产生多个对象,不同的对象拥有各自不同的特点(属性),但是所有的对象都拥有相同的功能(方法)。
专业描述:类是对象共性的集合,而对象时类的实例,类必须依靠对象实例才可以使用。
简单java类
- 简单java类指的是一个类之中主要由属性以及setter、getter方法所组成的类,这个类不牵扯到各种复杂的运算逻辑,仅仅是进行相关数据的存储,同时这种类一般都有明确的实物类型,例如:定义一个描述部门的信息类,定义一个描述雇员的信息类。
- 要求
- 类名称一定要有意义
- 类之中所有的属性都必须使用private封装
- 如果要进行属性的设置或者是修改,则一定要通过setter方法完成,而属性的获取要通过getter;
- 对象中的所有信息不允许直接在类中使用“System.out.println()”输出,所有的输出内容一定要返回给被调用处输出处理
- 类之中可以定义若干个构造方法,但是一定要提供有一个无参构造方法(需要通过反射机制研究)
public class Dept(){
private long DeptNo;
private String name;
private double avg;
public Dept(){}
public Dept(long DeptNo,String name,double avg){
this.DeptNo = DeptNo;
this.name = name;
this.avg = avg;
}
public long getDeptNo(){
return this.DeptNo;
}
public String getname(){
return this.name;
}
public double getavg(){
return this.avg;
}
public void setDeptNo(long DeptNo){
this.DeptNo = DeptNo;
}
public void setname(String name){
this.name = name;
}
public void setavg(double avg){
this.avg= avg;
}
public void getInfo(){
System.out.println("部门编号:"+this.DeptNo+"部门名字:"+this.name+"部门平均分:"+this.avg);
}
}
public class Main(){
public static void main(String[] Args){
Dept d = new Dept(10,"财务部",1.2);
d.getInfo();
}
}
错误: 在类 Dept 中找不到 main(String[]) 方法
需要新建项目,导入jdk包。
- 当加入逻辑业务时,此时就不是简单java类。
static关键字
- static在实际开发中,可以定义成员属性、类中的普通方法、定义类(需要结合内部类的结构进行使用)
static属性
- 对于公共属性、在Java中就建议使用static关键字来进行定义。
此时类中出现的pub属性由于使用static关键字进行了定义,这个时候该属性就成为了一个公共属性、另外,每一个实例化对象拥有各自的堆内存空间,但是却可以拥有同一块公共数据区的使用权限,那么如果一个对象改变了公共区该属性值,那么其他对象对应的内容也都将被同时修改,所以static就非常适合于进行公共属性的定义。 - static属性可以直接通过类名进行调用,不需要经过实例后的对象调用。
- 可以用来统计新建对象的个数
static方法
- 最大的特点是:可以在没有实例化的时候,直接用类名调用方法
- 需要注意的是:
- static方法只能够调用static方法和static属性(因为其他属性和方法需要实例化之后才能使用,而static方法不用。所以static中如果出现了其他属性,那么在未实例化就调用的时候,就出错了)
- 非static方法可以调用static方法及属性,也能够调用非static方法及属性
- 普通块
- 构造块