栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第四章 面向对象1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第四章 面向对象1

面向对象:面向对象的编程语言 object oriented programming 缩写OOP
  • 以分类的方式进行思考和解决问题。
  • 面向对象先对整体关系作出分类,然后根据不同的类深入细节处理。

类是什么? 类是一个抽象概念,是一个模板。

例如 冰箱类:型号,大小,开门,关门

 面向对象的操作步骤
  1. 首先 设计类。

2.最终在使用的时候,是根据类实例化出具体的对象,去使用具体的对象来完成功能。

面向对象与面向过程相辅相成。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,任然采用面向过程的思维方式。

java类的定义

面向对象的程序设计 第一步:发现类

类的声明格式为:
     访问权限修饰符  修饰符  class 类名{
     }

   例如
              public class 类名{
           }  

   访问权限修饰符有两种 public  ,无(默认)
   修饰符:final  abstract
   关键字 class 用来定义一个类

   java类名的命名规范: 类名首字母大写,见名知意,驼峰表示

第二步:发现类的共有属性(成员变量)

第三步:发现类的行为(成员方法)

public class Car{
//第二步:发现类的共有属性(成员变量)   名词
   String name;  //初始化值默认为null
   String color;
   int price;  //初始化值默认为0


   //第三步:发现行为(成员方法)   动词
    public void run(){
        System.out.println(name+"汽车行驶");
        return 返回值;
    }

    public void stop(){
        System.out.println(name+"汽车停止");
    }
    
}

成员变量是定义在类中,方法体之外的变量。

在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的值对其初始化。

对象的创建和使用
public class CarCreat {
    public static void main(String[] args) {
        
        Car bm5=new Car();
        bm5.name="宝马5";
        bm5.price=600000;
        bm5.color="红色";
        bm5.run();
        bm5.stop();

        Car bc=new Car();
        bc.name="奔驰";
        bc.price=700000;
        bc.color="青色";
        bc.run();
        bc.stop();


        Scanner sc = new Scanner(System.in);
        sc.nextInt();

    }
}
变量分类

基本类型:byte  short  int  long  ...

引用类型:String   数组 ....

按照位置分类

  • 成员变量:

成员变量是定义在类中,方法体之外的变量。

成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

在定义成 员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

成员变量 在创建对象的时候会从类中复制一份到对象中。

  • 局部变量:

在方法、构造方法或者语句块中定义的变量被称为局部变量。

局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

局部变量 在使用前必须初始化赋值。

变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁

方法分类
  • 成员方法:成员方法是定义在类中,主要是完成某种行为

        语法格式:

                      修饰符 返回值类型 方法名( 参数列表){

                                 方法体语句;

                                  [return 返回值]

}

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

                      类中有一个默认的无参的构造方法,可以为属性赋予默认值。

            Car bm=new Car();   //Car() 就是类中的构造方法

          特点:(1)方法名与类名相同,没有返回值且不需要void修饰。

                    (2) 一个类中可以有多个构造方法。

                     (3)类中一旦定义了有参的构造方法,默认无参的构造方法就会失效,

                               如果需要使用,需要显示的定义

               

        public Car(){
          System.out.println("Car类无参的构造方法")
}
方法重载:把一个类中有多个方法名相同的现象称为方法重载

如何区分方法:通过参数的个数,类型,顺序区分

方法的重载与返回值无关

package day1;

public class Che {
    String name;
    int price;
    String color;

    public Che(){

        System.out.println("Che类无参的构造方法");
    }

    //Che类有参的构造方法
    //this表示当前正在使用的对象
    public Che(String name,int price,String color){
        System.out.println("有3个参数的构造方法");
        this.name=name;//右边的name是传入进来的参数name,左边的name是上面定义的类中的name。把右边传入进来的参数name赋给左边的name
        this.price=price;
        this.color=color;

    }

    public Che(String name,int price){
        System.out.println("有2个参数的构造方法");
        this.name=name;
        this.price=price;
        this.color=color;

    }

    public void run()
    {
        int a=0;
        System.out.println(this.name+"跑挺快"+a);
    }

    public void run(int speed)
    {
        System.out.println(this.name+"以"+speed+"的速度跑挺快");
    }
}
package day1;

public class TestChe {
    public static void main(String[] args) {
            Che bmx5=new Che();
                bmx5.name="宝马x5";
                bmx5.run();

            Che dz=new Che("大众",300000,"黑色");
            System.out.println(dz.name);
            System.out.println(dz.price);
            System.out.println(dz.color);
            dz.run();

            Che ad=new Che("奥迪",400000);

    }
}
对象与引用

java语言中除基本类型之外的变量类型都称之为引用类型。

java中的对象是通过引用对其操作的

1)右边的“new Car()”,是以Car类为模板,在堆空间里创建一个Car类对象。

2)左边的“Car bm”创建了一个Car类型引用变量。所谓Car类的引用,就是以后可以用来指向Car 对象的对象引用。

3)”=”操作符使对象引用指向刚创建的那个Car对象。

我们可以把这条语句拆成两部分:

Car bm; //对象引用变量

bm= new Car();//对象本身

这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。

new Car(); 这个语句在堆空间里创建了实体,尽管它们也是确确实实存在的实体,但是, 我们看不见,也摸不着。 对象没有名字,也就没法直接访问它。我们需要通过对象引用来间接访问对象。 对象好比是一只很大的气球,但是我们抓不住它。引用变量是一根绳,可以用来系汽球。 Car car1;

(1)创建一根绳子,一根还没有系上任何一个汽球的绳; Car car2;

(2)就又做了一根绳,还没系上汽球, car1 = new Car();

(3)给car1 系上气球; car2 = car1 ;

(4)这里,发生了复制行为。要说明的是,对象本身并没有被复制,被复 制的只是对象引用。 结果是,car2也指向了car1所指向的对象。两根绳系的是同一只汽球

硬盘上放着.class文件,run时,把.class文件加载到内存里

Car car1=new Car();
    car1.name="宝马";
    car1.price=400000;
    car1.showInfo();

Car car2=new Car();
    car2.name="奔驰";

Car car3=car2;
    car3.name="奥迪";

System.out.println(car1.name);  //输出 宝马
System.out.println(car2.name);  //奥迪
System.out.println(car3.name);  //奥迪。car2拿了1002的地址,然后赋给了car3。紧接着car3将名字修改为了“奥迪”,则1002中name变为“奥迪”。所以输出时,car2.name和car3.name都是“奥迪”
值传递和引用传递

java中的参数传递有两种:(本质上传递的都是值,但一般在理解时细分为两种)

值传递:针对于基本类型,变量和变量值在一起存储

引用传递:对于引用类型,持有对象的地址,每次传递时,并不是把对象本身传递,传递的是对象地址

package day1.Demo;

public class Demo1 {
    public static void main(String[] args) {
        //值传递和引用传递
        int a=10;
        int b=a;

        Car car2=new Car();//假设car2拿的地址值为1002
        Car car3=car2;//将car2赋给car3,即将地址值1002赋给了car3
    }
}
package day1.Demo;

//声明了两个独立的基本类型变量a和b
public class Demo2 {
    public static void main(String[] args) {
        int a=10;
        new Demo2().test(a); //直接将a的值10赋给b
        System.out.println(a); //输出10
    }

    public void test(int b){
        b=20;   //在此方法中b=20
    }
}
package day1.Demo;

public class Demo3 {
    public static void main(String[] args) {
        Car car1=new Car();
            car1.name="宝马";
            new Demo3().test(car1);//引用类型实际不是传对象本身,而是传对象的地址
            System.out.println(car1.name);//输出 奔驰
    }

    public void test(Car car2){ //car1将地址传递给了car2
        car2.name="奔驰";
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/930386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号