类与对象的相关总结

一、类与对象的基本概念

首先来看一个简单的理解:现有学生信息表内容如下:

姓名

身高

体重

张三

168

65

李四

165

60

 对应到类与对象的概念:

类:由姓名、身高、体重组成的信息模板;

对象:张三或李四对应的模板中的的信息;

 

类与对象是整个面向对象中最基础的组成单元。

 

类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);

对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。

 

可以一句话来总结出类和对象的区别:

1.类是对象的模板,对象是类的实例。

2.类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。

3.类不能直接使用,对象是可以直接使用的。

 

二、类与对象的定义和使用

       类的使用分为以下三个步骤:定义类(创建类)—>创建对象—>类的操作。假如你是一名人民教师,学校要求你对你所带班级学生进行素质测评,首先你需要有一张表格,列出都需要哪些信息作为参考(定义类),然后再把班上的学生信息对应填进去(创建对象),最后再对各种信息进行加权(类的操作),这样你就最终得到一张素质测评表,里面的信息可以随便使用(ps:这里是对所有对象都进行了统一的操作,但在实际应用中往往针对不同的对象有不同的操作,在后面的内容中会加以说明)。

(1)定义类(创建类):

在Java中定义类,使用关键字class完成。语法如下:

class 类名称 {           //公开类加public

         属性 (变量) ;   //例如:int x=1;

         行为 (方法) ;   //例如:System.out.println(x);

}

范例:定义一个Person类

        class Person {     // 类名称首字母大写

            String name ;

            int age ;

            public void tell() {        // public static void main(String[] args)

                                        //没有static(静态的)

                  System.out.println("姓名:" + name + ",年龄:" + age) ;

                 }

}

(2)产生对象

由上面类与对象的基本概念可知,类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型(不要慌,后面将对应用数据类型加以说明),所以 对象的产生格式(两种格式)如下:

(1)格式一:声明并实例化对象

         类名称 对象名称 = new 类名称 () ;

(2)格式二:先声明对象,然后实例化对象:

        类名称 对象名称 = null ;

        对象名称 = new 类名称 () ;

ps:数据类型图:
                                         ┏数值型━┳━整数型:byte short int long

              ┏基本数据类型━━┫             ┗━浮点型:float double

              ┃                         ┣字符型:char

数据类型╋                         ┗布尔型:boolean

              ┃                        ┏类(class)

              ┗引用数据类型━━╋接口(interface)

                                        ┗数组(array)
引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间(记住这个就够了)。

(3)类的操作

对属性与方法的理解,这里有一张图:

                                                             

                                  在LOL中英雄就是类名,个个英雄的名称、血量、护甲、移动速度就是他的属性,

                                       他杀敌、拆塔、救人、坑队友的行为(你会发现均为动词)就是各种方法。

 

当一个实例化对象产生之后,可以按照如下的方式进行类的操作:

对象.属性:表示调用类之中的属性;

对象.方法():表示调用类之中的方法。

范例:使用对象操作类

        package com.wz.classandobj;

        

        class Person {

            String name ;

            int age ;

            public void get() {

                System.out.println("姓名:" + name + ",年龄:" + age);

            }

        }

        

        public class TestDemo {

                public static void main(String args[]) {

                    Person per = new Person() ;// 声明并实例化对象

                    per.name = "张三" ;//操作属性内容

                    per.age = 30 ;//操作属性内容

                    per.get() ;//调用类中的get()方法

                }

}
运行结果:
姓名:张三,年龄:30
 

以上完成了一个类和对象的操作关系,下面换另外一个操作来观察一下:

        package com.wz.classandobj;

        

        class Person {

            String name ;

            int age ;

            public void get() {

                System.out.println("姓名:" + name + ",年龄:" + age);

            }

        }

        

        public class TestDemo {

                public static void main(String args[]) {

                    Person per = null;//声明对象

                    per = new Person() ;//实例化对象

                    per.name = "张三" ;//操作属性内容

                    per.age = 30 ;//操作属性内容

                    per.get() ;//调用类中的get()方法

                }

}
 

运行结果:

姓名:张三,年龄:30
 

问题来了,以上两种不同的实例化方式有什么区别呢?

我们从内存的角度分析。首先,这里给出两种内存空间的概念:

(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间;

(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。

                                         在这里源引YouTube上某教师视频解说截图来说明堆栈内存区别如下:

 

任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值(划重点)。

于是,上面两种对象实例化对象方式内存表示如下:

 

两种方式的区别在于①②,第一种声明并实例化的方式实际就是①②组合在一起,而第二种先声明然后实例化是把①和②分步骤来。

如果使用了没有实例化的对象,结果如何?

如下:

        package com.wz.classandobj;

        class Person {

            String name ;

            int age ;

            public void get() {

                System.out.println("姓名:" + name + ",年龄:" + age);

            }

        }

        

        public class TestDemo {

                public static void main(String args[]) {

                    Person per = null;//声明对象

                    //per = new Person() ;//实例化对象

                    per.name = "张三" ;//操作属性内容

                    per.age = 30 ;//操作属性内容

                    per.get() ;//调用类中的get()方法

                }

}
运行结果:
        Exception in thread "main" java.lang.NullPointerException

    at com.wz.classandobj.TestDemo.main(TestDemo.java:15)
        此时,程序只声明了Person对象,但并没有实例化Person对象(只有了栈内存,并没有对应的堆内存空间,就像你买东西说了名字老板说没有货),则程序在编译的时候不会出现任何的错误(因为这件东西是有的),但是在执行的时候出现了上面的错误信息(老板没货你自然买不到)。这个错误信息表示的是“NullPointerException(空指向异常)”,这种异常只要是应用数据类型都有可能出现。

 

      以上为本人结合网络资源对类与对象相关内容的阐述与总结,有不对的地方还请各位多多指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值