面向对象
面向对象这个对象,指的是客体。所谓客体是指客观存在的对象实体和主观抽象的概念。
为什么要面向对象:
面向对象是为了解决系统的可维护性,可扩展性,可重用性,我们再进一步思考,面向对象为什么能解决系统的可维护性,可扩展性,可重用性?
面向对象产生的历史原因有下面两点:
1、 计算机是帮助人们解决问题的,然而计算机终究是个机器,他只会按照人所写的代码,一步一步的执行下去,最终得到了结果,因此无论程序多么的复杂,计算机总是能轻松应付,结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和扩展了。
2、 结构化设计是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题的基本思路。
可见结构化设计在设计系统的时候,无法解决重用、维护、扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想,能不能让计算机直接模拟现实的环境,用人类解决问题的思路,习惯,步骤来设计相应的应用程序?这样的程序,人们在读它的时候,会更容易理解,也不需要再把现实世界和程序世界之间来回做转换。
与此同时,人们发现,在现实世界中存在的客体是问题域中的主角,所谓客体是指客观存在的对象实体和主观抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为不稳定的,同时客体之间具有各种联系,因此面向客体编程,比面向行为编程,系统会更稳定,在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变时候只需要改变行为即可,主架构则保持了稳定。
于是面向对象就产生了。
类
成员变量
public class OneClass {
//零到多个成员变量
public String name;
protected long num2;
private int num;
/*public > protected > private*/
//调用方法
OneClass one = new OneClass("Lisi", 1212, 151);
}
构造器
public class OneClass {
//零到多个构造器
public OneClass(String name, long num, int num2){
this.name = name;
this.num = num2;
this.num2 = num;
}
}
实例方法
public class OneClass {
//零到多个类方法
public String How(String name){
return "Hello " + name;
}
//修饰符 返回值 方法名 (零个或者多个形参)
}
静态变量里面为什么不能调用非静态
==主函数一定是静态方法==
this
- [x] 在构造器表示调用本类中的构造器
- [x] 在实例方法中表示调用本类
public class OneClass {
//零到多个成员变量
public String name1;
public String name2;
public String name3;
/*public > protected > private*/
OneClass(String name1) {
this.name1 = name1 + "abc";
}
OneClass(String name1, String name2) {
this(name1);
this.name2 = name2;
}
OneClass(String name1, String name2, String name3) {
this(name1, name2);
this.name3 = name3;
}
public void How(){
this.name3 = "asd";
}
}
字符串连接符 +
public static void main(String[] args) {
//加号
int i = 6 + 6;
String name = "Hello " + 2213;
//加号用在字符串连接时,如果一方为任意基本数据类型,都会被转换成String
}
变量的命名
以英文字母或者下划线开头,不能以数字开头,也不能跟关键字重合
修饰符
- [ ] public 可以在项目的任何分包中调用
- [ ] protect 只能在当前分包中调用
- [ ] private 只能在当前类或者子类中调用