CoreJava 面向对象

面向对象

一、面向过程与面向对象

  1. 面向过程:将事情分析之后,按照步骤依次翻译为代码,代码的执行顺序就是事情的处理顺序
  2. 面向对象:当需要解决一个问题的时候,寻找能够解决该问题的对象,利用其方法解决问题的过程

二、对象与类

  1. 对象:客观世界存在的事物
  2. 类:具有相同属性方法等一类事物
  3. 类是对象的共性,是对象的模板;对象是类的实例,是类的表现
  4. 对象的特点:
    1. 属性:描述该对象具有什么属性
    2. 方法:描述该对象可以做什么事情
  5. 类的特点:
    1. 成员方法:属性
    2. 成员方法:方法

三、成员变量

  1. 语法:在类以内,函数之外声明的变量

  2. 赋值:

    1. 如果需要在声明之后进行赋值,那么必须按照显示初始化的方式书写

      public class Student {
      	String name = "zhangs";
      }
      
    2. 如果不需要在声明之后赋值,成员变量使用默认值

      public class Student {
      	String name;
      }
      
  3. 有效范围:全类内有效,与其声明的位置无关

  4. 命名冲突:成员变量间不允许命名冲突,但可以和局部变量命名冲突,当发生这种情况的时候,局部变量优先

局部变量 成员变量
需要先赋值,然后才能使用 具有默认值
有效范围 从声明的位置开始,到其所在代码块结束 全类中有效,与声明的顺序和位置无关
命名冲突 局部变量在重合的范围之内不允许命名冲突 成员变量之间不允许命名冲突,但可以和局部变量命名冲突,当发生这种情况的时候,局部变量优先

四、成员方法

  1. 语法:

    public 返回值类型 方法名(形参列表){
        //方法实现
    }
    
  2. 声明的位置:类以内,其他方法之外

  3. 方法的声明:

    1. 表达了该类的对象具有会做什么

    2. 完整的语法

      修饰符 返回值类型 方法名(形参列表) 可能抛出的异常{
          //方法实现
      }
      
    3. 注意:修饰符在语法不冲突的情况下可以使用多个,相互之间没有顺序要求,例如public static都是修饰符,写作static public也可以

  4. 方法的重载(overload):

    1. 语法概念:在同一个类中,声明了多个方法名相同但形参列表不同的方法,这些方法之间互为重载
    2. 语法要求:
      1. 在同一个类中
      2. 方法名相同
      3. 形参列表不同(数据类型不同,数量不同,顺序不同)
      4. 对修饰符,返回值类型和可能抛出的异常没有要求
    3. 方法调用:在编译时根据传入的参数数据类型,顺序,个数去匹配相对应的方法
      注意:当出现传入实参的数据类型与参数列表都不一致的时候,有数据类型自动向上匹配的原则,但是,不允许出现引用不明确

五、构造方法

  1. 语法:

    public 类名(形参列表) 可能抛出的异常{
        //方法实现
    }
    
  2. 声明的位置:类以内,其他方法之外

  3. 语法要求:

    1. 构造方法没有返回值类型
    2. 构造方法的方法名必须和类名完全一致
    3. 构造方法不能被手动调用,仅在创建对象的时候被虚拟机自动调用
    4. 当一个类中没有显式声明构造方法的时候,虚拟机会默认分配一个公开的、没有参数的构造方法
    5. 当一个类中显式声明任何构造方法之后,虚拟机不再默认分配构造方法

六、对象的创建

  1. 语法:类名 变量名 = new 类名(实际参数);
  2. 对象创建的过程:
    1. 分配空间:对所有属性赋予默认值
    2. 虚拟机调用构造方法:
      1. 初始化属性:对所有属性赋予初始值
      2. 执行构造法中的代码:通过构造参数的传递进行属性的赋值

七、对象的使用

  1. 访问属性:通过 对象变量名.属性 的方式进行访问

    1. 获取对象中属性的值
    public class TestStudent {
        	public static void main(String[] args) {
    		Student s = new Student();
    		String sname = s.name;//获取对象中属性的值
    		System.out.println(sname);
    	}
    }
    class Student{
        	String name = "zhangs";
    }
    

    ​ b.为对象的属性赋值(通过访问属性的方式)

    class Student {
    	String name;
    }
    public class TestStudent{
    	public static void main(String[] args) {
    		Student s = new Student();
    		s.name = "zhangs";//为属性赋值
    		System.out.println(s.name);
    	}
    }
    

    ​ c.为对象的属性赋值(通过构造方法的方式)

    class Student {
    	String name;
    
    	public Student() {
    	}
    
    	public Student(String sname) {
    		name = sname;
    	}	
    }
    public class TestStudent{
    	public static void main(String[] args) {
    		Student s = new Student("zhangs");//通过构造方法为属性赋值
    		System.out.println(s.name);
    	}
    }
    
  2. 调用方法:通过 对象变量名.方法名(实参列表) 的方式进行访问

class Student {
	public void study(int hours){
		System.out.println("Student study "+hours+" hours!");
	}	
}
public class TestStudent{
	public static void main(String[] args) {
		Student s = new Student();
		s.study(10);//调用对象的study方法并传入对应的实参
	}
}

八、this关键字

​ this的概念:this代表一个对象,代表当前对象,就像自然语言中的“我”

  1. this.的使用:

    1. this.属性:用于访问本类的成员变量,通常用于处理局部变量与成员变量重名的情况,当不存在重名的时候,可以省略

      class Student {
      	String name = "zhangs";
      	
      	public void show(){
      		String name = "guox";
      		System.out.println(name);//访问局部变量,打印guox
      		System.out.println(this.name);//访问成员变量,打印zhangs
      	}
      }
      
    2. this.方法:调用本类中的其他成员方法,通常可以省略

      class Student {
      	public void m1(){
      		System.out.println("invoke m1()");
      	}
      	public void m2(){
      		this.m1();//调用本类中的方法
      		m1();//this. 可以省略
      	}
      }
      
  2. this()的使用:

    只用在构造方法中,表示引用本类中的其他构造方法,避免代码的冗余,必须声明在构造方法的第一行有效语句,但应该避免递归调用

    class Student {
    	String name;
    	public Student(){}
    	public Student(String name){
    		this();//指引虚拟机引用无参构造方法
    		this.name = name;
    	}
    }
    
posted on 2020-11-30 00:38  blueskylabor  阅读(69)  评论(0)    收藏  举报