面向对象
面向对象
面向对象
- 面向过程:步骤简单清晰,第一步和第二步步骤清晰,面向过程适合处理一些较为简单的问题
面向对象:分类的思维方式,问题进行分类,对分类进行单独的思考,面向对象适合处理复杂的问题,适合处理需要多人协作的问题
-
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,仍需要面向过程的思路去处理。
-
面向对象编程的本质就是:以类的方式组织代码,以对象的组织封装数据。
-
面向对象的三大属性:封装、继承、多态
方法
- 执行完return之后这个方法就执行完毕了。
判断是否为同一个方法就要看参数名和参数列表是否相同
public void sayBye() {
return;
}
- 方法的调用:静态方法和非静态方法
静态方法:类名.方法名 就可以直接调用这个方法
public class B {
public static void main(String[] args) {
B.sayBye();//直接调用
}
public static void sayBye() {//static
System.out.println("BYE!");
}
}
非静态方法:实例化这个类
public class B(){
public static void main(String[] args) {
B b=new B();//实例化
System.out.println(b.sayHello());//调用方法
}
public String sayHello(){
return "HelloWorld!";
}
}
方法之间的调用:
public void a() {
d();
}
public static void d() {
}
两个非静态方法之间可以调用,两个静态方法之间可以调用,非静态方法可以调用静态方法。
因为在类的加载过程中,静态方法和类一起加载完成,而非静态方法在类实例化之后才能加载完成
- 值传递和引用传递:
值传递:
public static void main(String[] args) {
int a=1;
System.out.println(a);
B.change(a);
System.out.println(a);
}
public static void change(int a) {
a=10;
}
输出结果为:1 1
因为在方法中定义的是形式参数,不是实际参数,两个参数的地址不一样,在没有返回值的情况下,即使调用了方法,形参中的值也没有办法赋值给实参
引用传递:
public class B {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.name);
B.change(p);
System.out.println(p.name);
}
public static void change(Person p) {
p.name = "sw";
}
}
class Person {
String name;
}
输出结果:nuLL sw
在方法中直接调用的是person的地址,直接修改了这个对象中的属性,所以输出的时候才会被改变
类与对象的创建
-
类被实例化之后会返回一个自己的对象,就好像是在人的这个模糊的概念中,你想要一个具体的人,这时候就返回了初始化了人的概念的人,已经是一个具体的人了,人的身上还有被定义好的属性,可以根据这个人具体赋值,就好像婴儿出生一样
类是一个模板,对象就是一个具体的实例
Student xiaoming=new Student();
-
使用new关键字创建 的时候,除了分配内存空间之外,还会给创造好的对象进行默认的初始化和对类中构造器的调用
- 构造器(构造方法):一个类即使什么都不写也会有一个默认的构造方法
- 条件:构造器必须和类的名字相同,必须没有返回值,也不能写void
- 作用:使用new关键字,本质在于调用构造器,用来初始化值
- 注意:一旦定义了有参构造,午餐构造就必须显示定义
public Person(){//无参构造 } public Person(String name){//有参构造 this.name=name; }
总结:
类与对象:类是一个模板,对象是一个具体的实例
方法:方法的调用
对应的引用:引用类型。对象是通过引用来操作的
属性:字段、成员变量、默认初始化、
修饰符 属性类型 属性名=属性值
对象的创建和使用:使用new、构造器
对象的属性、对象的方法
类:静态的属性、动态的行为