javaee类与对象

1、什么是面向对象?
**面向对象是一种解决问题的思想。**主要依靠对象和对象之间交互完成某个事情。

(对象一般是抽象对象,比如人,衣服,洗衣机,难点在于对对象的理解,多做题和实践)

面向对象最重要的就是对象,难点在于:
1、找对象 (对象从何而来,为什么产生)
2、创建对象
3、使用对象

2、面向对象与面向过程
比如 你自己买手机 需要你自己设计一个过程自己完成,而面向对象相当于你有一个秘书,你直接告诉秘书我想换手机,秘书就会帮你去下单,取快递,然后你用

而需要注意的是面向过程和面向对象并不是一门语言,而是解决问题的一种方法或者思想,没有好坏,只有特定的应用场景。

3、类定义和使用
知道对象前需要知道类。
1、从语法上来说,是使用class关键词来定义类的;
2、对象是现实生活中的实体,而类是抽象的;
3、类就是用来描述某个对象的

class 类名
{
   字段/属性
   方法/行为
}

例如:

class WashMachine  //类名 采用大驼峰更好
{
    public String brand;  //定义字段或属性
    public String type;
    public double weight;
    public double lenght;
    public double height;
    public double color;
    public  void washClothes() //定义方法、功能或行为
    {
        System.out.println("洗衣功能");
    }
    public  void dryClothes()
    {
        System.out.println("脱水功能");
    }
    public void setTime()
    {
        System.out.println("定时功能");
    }
} 

> 属性/字段还有方法/功能/行为都属于类的信息。

类相当于图纸,对象相当于房子,通过类可以产生一个对象。

注意事项:
1、一般一个文件当中只定义一个类,不定义多个;
2、main方法所在的类一般要使用public修饰(注意:Eclipse默认会子啊public修饰的类中找main方法);

    public static void main(String[]args)
    {
        System.out.println("xiyiji:main");
    }

3、public修饰的类必须要和文件名相同;
4、不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。
在这里插入图片描述
类也可以叫做类型,如上自己定义了类型叫洗衣机

public class java
{
    public static void main(String[]args)
    {
        WashMachine ok=null; //此时ok就是一个变量,是WashMachine类型
    }
}

定义了一个类,就相当于在计算机中定义了一种新的类型,与int和double类似,但int和double是java语言自带的类型,而类是用户自定义的新的类型。

4、类的实例化
4.1、什么是实例化?
由自定义的类型产生的对象的过程,叫做实例化。除此之外,实例化也是一种套用自定义类模板的方法。

4.2、如何实例化一个对象?
使用new实例化一个洗衣机(WashMachine)对象:

WashMachine ok=new WashMachine();
//通过new关键字来实例化一个WashMachine对象

同一个类也可以创建多个实例,实例化出的对象,占用实际的物理空间,存储类成员变量。
类是抽象的概念,对象才是真正的实体。

通过对象的引用,可以访问和修改对象中的成员/属性:

这个类里面有brand,type,weight,lenght,height,color这几个属性。如何访问引用的对象里的属性?
如:

System.out.println(ok.brand); //通过【类名.成员/方法】来访问对象

能访问对象里的属性(如brand)也可以赋值:

ok.brand="立白"; //将属性brand赋值为立白

4.3、属性/字段
1、普通的成员属性/普通的成员变量;
例:

public double weight;

2、静态的成员属性/静态的成员变量。

例:

public static double color;  //static

3、这些属性字段在堆上,属性是定义在方法/功能的外面,类的里面,是成员变量。如果再在方法/功能里定义一个变量,它是一个局部变量。

4、对于成员变量来说,在未赋值的情况下,调用类中的成员,输出为默认值,其中,引用类型都为null,
简单类型[4种整数类型(byte、short、int、long),2种浮点类型(float、double),1种字符类型“char”,1种布尔类型“boolean”]都是对应的0值,如下。

int -> 0
float 0.0
long 0L
布尔类型boolean false
char ‘\u0000’

5、this引用
5.1为什么要有this引用?
对于以下代码:

public class MyDate
{
    public int year;
    public int month;
    public int day;

    public void setDay(int y,int m,int d) //局部变量,局部变量优先
    {
        year=y;
        month=m;
        day=d;
    }
    public void printDay()
    {
        System.out.println(year+"-"+month+"-"+day);
    }
    public static void main(String[]args)
    {
        MyDate myDate=new MyDate();
        myDate.setDay(2022,2,27 );
        myDate.printDay();

        MyDate myDate2=new MyDate();
        myDate2.setDay(2022,2,22 );
        myDate2.printDay();
    }
}

该代码能够顺利编译成功,但如果遇到以下几个问题:
(1)形参名与成员变量名相同:

    public void setDay(int year,int month,int day) //局部变量,局部变量优先
    {
        year=year;
        month=month;
        day=day;
    }

根据局部变量优先原则,方法中的year都为方法的参数year,编译无法通过,需要通过this来调用类中的成员变量

public void setDay(int year, int month, int day)
{
   this.year = year;  //此时year就代表当前对象的year
   this.month = month;
   this.day = day;
}

(2)当两个对象都在调用方法setDay和printDay时,函数不能确定打印的是那个对象的数据,此时需要this来确定打印对象

 public void printDay()
 {
     System.out.println(this.year+"-"+this.month+"-"+this.day);
 }

5.2 什么是this引用?

java编译器给每个“成员方法”增加了一个隐藏的引用类型参数(this),该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

public class MyDate
{
    public int year;
    public int month;
    public int day;

    public void setDay(int year,int month,int day) 
    //局部变量,局部变量优先,除此之外setDay和printDay都是成员方法
    {
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public void printDay()
    {
        System.out.println(this.year+"-"+this.month+"-"+this.day);
    }
}

this引用的是调用成员方法的对象

 public static void main(String[]args)
{
    MyDate myDate=new MyDate();
    myDate.setDay(2022,2,27 ); 
    myDate.printDay();
}

this引用的特性:

1、this的类型:哪个对象调用就是哪个对象的引用类型;
2、this只能在成员方法中使用;
3、在“成员方法”中,this只能引用当前对象,不能引用其它对象,具有final属性;
4、this不可以为空。

this的三种用法:

1、this.成员变量(成员变量不能是静态的)
2、this.成员方法(成员方法不能是静态的)
3、this()调用其他的构造方法(必须放在第一行)

6、什么是构造方法?
构造方法是一个特殊的成员方法。
1、没有返回值类型,设置为void也不行;
2、方法名字需要和类名是一样的;
3、一般情况下使用public修饰;
4、在创建对象时,编译器自动调用,且在整个对象的生命周期内只调用一次。

public class MyDate
{
    public int year;
    public int month;
    public int day;
    public MyDate(int year,int month,int day) 
    //方法名与类名相同,public修饰
    {
        this.year=year;
        this.month=month;
        this.day=day;
        System.out.println("MyDate(int,int,int)方法被调用了");
    }
    public void printMyDate()
    {
        System.out.println(year+"-"+month+"-"+day);
    }
    public static void main(String[]args)
    {
        //此处创建了一个MyDate类型的对象,并没有显式调用构造方法
        MyDate d=new MyDate(2022,2,28);
        //输出MyDate(int,int,int)方法被调用了
        d.printMyDate();  //2022-2-28
    }
}

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值