面向对象

目录

面向对象和面向过程的设计思想

面向过程:

面向对象:

类:

结构:

1.发现类 汽车类

2.定义类的成员变量(属性) 名词

3.定义类的成员方法(行为/功能) 动词

对象

概念:

成员变量:

局部变量:

方法:

对象与引用

值传递和址传递

作用:

static关键字

概念

static属性

代码块

概念: 

作用:

包的命名规则:

访问权限修饰符

概念:

四种修饰符:


面向对象和面向过程的设计思想

面向过程

procedure oriented programming 缩写 POP

分析出解决问题所需要的步骤,然后把步骤一步一步实现。

面向过程直接关注流程。

面向对象

object oriented programming 缩写 OOP面向对象的编程语言

先设计,对现实中客观的事物进行分类,创建此类,在类中定义功能,创建出具体的对象,

让对象去做具体的事情。

类:

类是对象现实事物的抽象,实际生活中,选有对象(具体存在)。

结构:

1.发现类 汽车类

public修饰的类,类名必须与文件名一致

非public修饰的类,类名可以与文件名不一致

[访问权限修饰符] [修饰符,abstract,final] class 类{

}

2.定义类的成员变量(属性) 名词

成员: 类的成员,在类中定义 定义在类中,方法体之外.

数据类型可以是java中的支持的任意类型(引用类型,基本类型)

成员变量可以初始化,也可以不初始化,不初始化时,java会用默认值为其初始化

引用类型类型默认值是null 整数是0,浮点数是0.0 boolean是false char是' ';创建对象时,会从类中向对象中复制一份成员变量

在构造方法,成员方法,代码块中可以使用成员变量

语法:数据类型 变量名;(也可以进行初始化)

3.定义类的成员方法(行为/功能) 动词

局部变量: 定在方法,构造方法,代码块中 使用前必须赋值

数据类型可以是java中支持的任意类型,方法的参数也是局部变量

方法运行时局部变量创建,运行结束后局部变量销毁

成员方法: 定义在类中,没有被static修饰的.通过对象调用。

语法: [访问权限修饰符] [修饰符] 返回值类型 方法名(参数列表){

方法体;

}

对象

概念:

       具体存在的客观事物,可以拿来使用的,万事万物皆为对象。

例:Car bm = new Car() ;

new Car() new以Car为模板在内存创建对象,Car()为构造方法。(有一个构造方法,方法名与类名相同)

Car bm/bc 声明了一个Car类型的变量。

= 将创建的对象赋给了左边的变量。

bm 表示一个具体存在的对象,可以使用。

变量分类

成员变量:

定义在类中,在方法体之外。

数据类型可以是java中的支持的任意类型(基本类型、引用类型);

成员变量可以初始化,也可以不初始化,不初始化时,Java会用默认值将为其初始化;

引用类型默认值为null,整数是0,浮点是0.0,boolean是false,char是' ';

在构造方法,成员方法,代码块中可以使用。

局部变量:

定义在成员方法,构造方法,代码块中;

使用前必须赋值;

数据类型可以是java中支持的任意类型;

方法参数也是局部变量。

方法:

成员方法:定义在类中,没有被static修饰的,通过对象调用。

构造方法:用来初始化对象的方法。

特点:构造方法名与类名相同,没有返回值,也不需要void修饰,每个类中都至少有一个构造方法,也可

以定义多个,每创建一个对象时,至少调用一个构造方法。

如果类中无构造方法,默认会提供一个无参的,一旦定义有参的构造方法,默认的无效。

方法的重载:指同一类中具有相同的名字,但参数方法不同的方法。

参数不同:个数不同,类型不同,顺序不同。

方法重载与返回值无关。

对象与引用

值传递和址传递

● java中在调用方法传递参数时,有值传递和址传递俩种。

值传递:(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

代码:

public class Demo {
​
    /*
       基本类型值传递
     */
    public static void main(String[] args) {
        Demo d = new Demo();
        int a = 10;
        d.test(a);
        System.out.println(a);
    }
​
    /*
      形参b
      用实参a的值,直接对b进行了赋值,在内存中有两个独立的存储空间 a,b
     */
    public void test(int b){
        b = 20; //b的值发生改变 不会影响到a
    }
}

运行结果:

面向对象_第1张图片

● 引用传递:(形参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形 式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

代码:

public class Demo {
​
    /*
       引用类型 在传递时,传的是对象的地址
     */
    public static void main(String[] args) {
        Demo d = new Demo();
        Person zs = new Person("张三", 20);
        d.test(zs);//只是把对象的地址传递给了 p
        System.out.println(zs.name);//李四
    }
​
    /*
​
     */
    public void test(Person p){ //p和zs指向的是同一个对象
          p.name = "李四";
    }
}

运行结果:

面向对象_第2张图片

由此看出,基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。

变量分类:(按数据类型)

基本类型: byte short int long float double char boolean

引用类型: 数组,String,自定义的类

this关键字

this关键字代表当前对象 ;

使用this关键字引用成员变量;

使用this关键字引用成员方法。

作用:

       在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。

代码:

public class Person {
      //成员表变量
      public String name;
      int age;
      //构造方法
      public Person(){}
      public Person(String name,int age){
            this.name=name;
            this.age=age;
      }
      //成员方法   哪个对象调用showInfo方法,那么name,age就是哪个对象中的属性
      //this 表示当前正在操作的对象  在成员方法,构造方法中使用成员变量,使用this调用.
      public void showInfo(){
          System.out.println("姓名:"+this.name+" 年龄:"+this.age);
      }
}

运行结果:

面向对象_第3张图片

static关键字

概念

static被称为静态,可以用来修饰类的属性,方法,代码块,内部类。

• 随着类的加载而加载

• 优先于对象存在

• 修饰的成员,被所有对象所共享

• 可不创建对象,直接被类调用

static属性

静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个,且静态方法不能使用非静态成员变量。

代码块

代码块:类似于一个没有名字的方法,只有方法体。分为实例代码块和静态代码块。

实例代码块在创建对象之后,调用构造方法之前执行。

静态代码块在类加载的时候执行只执行一次。

public class Demo {

       String name;
       static String country = "中国";

       public Demo(){
           System.out.println("无参构造");
       }
       /*
         代码块:  类似一个没有名字的方法.
         代码块: 实例代码块  在创建对后执行,调用构造方法之前执行,每创建一次对象,执行一次
                静态代码块  在类加载时候执行,只执行一次 ,多个静态按照先后顺序
        */

      {
          System.out.println("实例代码块");
      }

      static{
          System.out.println("静态代码块1");
      }

     static{
         System.out.println("静态代码块2");
     }
    //静态代码块按照代码顺序执行

     public static void main(String[] args) {
         new Demo();
         new Demo();

    }
}

运行结果:

面向对象_第4张图片

 类什么时候加载?
     • main方法在哪个类中执行,这个类就会加载的.
     • 创建某个类的对象,
     • 调用某个类中静态属性,方法

概念: 

        为了更好地组织并管理类,java提供了包机制,用于区别类名的命名空间(类路径中的一部分)。

作用

 •避免类重名

•按照功能管理类

•控制访问权限

包的命名规则:

  包名都要小写

第一级为项目类型:com(商业)org(组织)edu(教育)gov(政府)

第二级为公司名称:oracle sun huawei

第三级为项目名称:erp,cms

第四级为功能模块:窗口   数据访问层   服务层  工具类 

访问权限修饰符

概念:

      用来修饰类,成员变量,成员方法,内部类,控制对其访问权限,访问权限和包是密切相关的。

四种修饰符:

 public            公共的      可以修饰类,成员变量,方法,内部类,在任何类中都可访问到

protected       保护的      可以修饰成员变量,方法,内部类,在不同包中的子类可以访问到            

default           默认的      可以修饰类,成员变量,方法,内部类,在同包的子类可以访问到

private           私有的      可以修饰成员变量,方法,内部类,只有在本类中可以访问

你可能感兴趣的:(笔试笔记,java)