ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA面向对象01——认识类与对象

2021-04-10 13:29:44  阅读:153  来源: 互联网

标签:01 JAVA name Person 对象 age 面向对象 person1 public


认识类与对象

OOP

Java中的重点内容!

什么是OOP

OOP:Object-Oriented Programming 面向对象程序设计
Java是面向对象,OOP是使用Java语言描述客观存在的事和物,并使用程序的逻逻辑将这些事和物联系起来,为实现某个目的而进行交互的过程。因此必须熟悉OOP才能很好的使用Java。

OOP的程序组成

面向对象的程序是由对象组成的,每个对象包含对用户的公开部分和隐藏部分。

认识类与对象

什么是类

类是一个模板,是对一类对象和行为和状态的描述,类中定义的是属性和行为(方法)。

什么是对象

对象是类的一个实例,表示一个独立的个体,每个对象都有自己的属性,通过不同的属性来区分不同对象。

类与对象的关系

类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。

类与对象的定义和使用

定义

{
class 类名{

	变量(属性);
	
	方法(行为);
}

范例:定义一个人(Person),有名字(name)和年龄(age)两个属性,有一个介绍(introduce)行为

public class Person {
    String name;
    int age;

    public void introduce(){
        System.out.println("我的名字是:"+name+",年龄为:"+age);
    }
}

使用

实例化对象

1、声明和实例化分开。

/*
	类名 对象名 = null;
	对象名 = new 类名();
*/
Person person = null;
person = new Person();

2、声明并且实例化对象

//类名 对象名 = new 类名();
Person person = new Person();

使用对象操作类

//对象名.属性名:表示调用类之中的属性;
//对象名.方法名():表示调用类之中的方法。

    public static void main(String[] args) {
    	//声明对象person1
        Person person1 = null;
        //实例化对象
        person1 = new Person();

		//给person1的name和age属性赋值
        person1.name = "WANWAN";
        person1.age = 21;

		//调用person1的介绍
        person1.introduce();
		
		Person person2 = new Person();
        person2.name = "MOMO";
        person2.age = 22;
        person2.introduce();
    }

运行结果:

我的名字是:WANWAN,年龄为:21
我的名字是:MOMO,年龄为:22

两种方式实例化对象的区别

从内存角度分析实例化过程;
首先了解一下两种内存空间是用来做什么的:
1、栈内存:保存的是堆内存的地址(方便理解就想成是保存了对象的名字)。
2、堆内存:保存的是对象的属性内容,堆内存要用new关键字来分配空间。
在这里插入图片描述
第一种方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二种方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看出,第二种方法就是把第一种方法的一二步合起来了

对象的引用传递

先看代码,还是刚才的两个对象,我们让person2 = person1来看看结果。

  public static void main(String[] args) {
        Person person1 = null;
        person1 = new Person();
        person1.name = "WANWAN";
        person1.age = 21;
        person1.introduce();

        Person person2 = new Person();
        person2.name = "MOMO";
        person2.age = 22;
        person2.introduce();

        person2 = person1; //引用传递
        person2.name = "FANFAN";
        person1.introduce();
    }

运行结果:

我的名字是:WANWAN,年龄为:21
我的名字是:MOMO,年龄为:22
我的名字是:FANFAN,年龄为:21

可以看到通过person2.name修改了name属性值,person1的name属性值也改变了。

我们可以来看下内存中的过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类的构造方法

在Java中每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

Person类:

public class Person {
    String name;
    int age;
    //无参构造
    public Person() {
   		System.out.println("调用了无参构造");
    }
	//有参构造(1个参数)
    public Person(String name){
    	System.out.println("调用了带name有参构造");
        this.name = name;
    }
	//有参构造(全部参数)
    public Person(String name, int age) {
    	System.out.println("调用了全参构造");
        this.name = name;
        this.age = age;
    }
}

下面看几个测试,来搞清楚对无参与带参的调用。

public class Test {
    public static void main(String[] args) {
       Person person1 = new Person();//没有参数
    }
}
//运行结果:
//调用了无参构造


 public class Test {
    public static void main(String[] args) {
       Person person1 = new Person("WAN",21);//全参
    }
} 
//运行结果:
//调用了全参构造


 public class Test {
    public static void main(String[] args) {
       Person person1 = new Person("WAN");//带name参数
    }
} 
//运行结果:
//调用了带name有参构造

public class Test {
    public static void main(String[] args) {
       Person person1 = new Person(22);//带age参数
    }
}
//运行结果:
//Error:不兼容的类型: int无法转换为java.lang.String

通过这些测试可以看出:new对象时会根据所带的参数选择已经写了的构造方法,如果没有对应的构造方法,则会报错

类的成员方法

类成员方法就是对象所拥有的动作,比如自我介绍就是人的一个动作,就可以称之为人的一个方法。成员方法由自己编写,和之间在入口方法中写代码一样。

格式:

 访问修饰符 [特殊修饰符 static/final/synchronized] 返回类型 方法名称([形参列表]){
       ...
   }

例:

public class Person {
    String name;
    int age;

	//这个就是成员方法
    public void introduce(){
        System.out.println("我的名字是:"+name+",年龄为:"+age);
    }
}

标签:01,JAVA,name,Person,对象,age,面向对象,person1,public
来源: https://blog.csdn.net/weixin_54597685/article/details/115565776

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有