• 【JavaSE】类和对象(一)


    目录

    1、类和对象

    1.1、什么是面向对象

    1.2、类与对象的基本概念

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

    1.3.1、定义一个学生类

     2、类的实例化

    2.1、 什么是实例化

    2.2、类的实例化格式

    3、默认初始化 


    1、类和对象

    1.1、什么是面向对象

    Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

    面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。

    在面向对象定义中,也规定了一些基本的特征:

    1. 封装:保护内部的操作不被破坏;
    2. 继承:在原本的基础之上继续进行扩充;
    3. 多态:在一个指定的范围之内进行概念的转换。

    对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)OOD(面向对象设计)OOP(面向对象编程)


    1.2、类与对象的基本概念

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

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

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

    总结:

    类和对象的区别:

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


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

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

    1. class 类名称 {
    2. 属性(变量);
    3. 行为(方法);
    4. }

    实例:定义一个Student类

    1. class Student{
    2. String name;
    3. int age;
    4. public void tell(){
    5. System.out.println("姓名:"+ name +",年龄:" + age);
    6. }
    7. }

    注意事项:

    • 类名注意采用大驼峰定义
    • 成员前写法统一为public,后面会详细解释
    • 此处写的方法不带static 关键字,后面会详细解释

    1.3.1、定义一个学生类

    属性:姓名  性别   年龄  学分

    方法:来上课:输出'按时上课,不要迟到,如果请假,即使补课'

               写作业:输出'教务系统,完成作业,一旦拖沓,神仙难救'

              要考试:输出:'考试目的,了解学情,人人必考,暴漏问题'

    1. public class Student{
    2.   public String name;
    3.   public String gender;
    4.   public short  age;
    5.   public double score;
    6.  
    7.   public void DoClass(){}
    8.   public void DoHomework(){}
    9.   public void Exam(){}
    10. }

     注意事项:

    1. 一般一个文件当中只定义一个类
    2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
    3. Public修饰的类必须要和文件名相同
    4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

     2、类的实例化

    2.1、 什么是实例化

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

    用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

    2.2、类的实例化格式

    类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式有两种,如下:

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

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

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

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

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

     实例:

    1. class Student{
    2. String name;
    3. int age;
    4. public void tell(){
    5. System.out.println("姓名:"+ name +",年龄:" + age);
    6. }
    7. }
    8. public class TestDemo{
    9. public static void main(String args[]){
    10. Student per = new Student();//声明并实例化对象
    11. per.name = "张三";//操作属性内容
    12. per.age = "30";//操作属性内容
    13. per.tell();//调用类中的tell()方法
    14. }
    15. //运行结果:
    16. //姓名:张三 , 年龄:30

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

    类名称  对象名称  = null;

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

    实例:

    1. class Student{
    2. String name;
    3. int age;
    4. public void tell(){
    5. System.out.println("姓名:"+ name +",年龄:" + age);
    6. }
    7. }
    8. public class TestDemo{
    9. public static void main(String args[]){
    10. Person per = null;//声明对象
    11. per = new Person();//实例化对象
    12. per.name = "张三";//操作属性内容
    13. per.age = 30;//操作属性内容
    14. per.tell();//调用类中的tell()方法
    15. }
    16. }
    17. //运行结果:
    18. // 姓名:张三,年龄:30

    引用数据类型基本数据类型最大的不同在于:

    引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间

    以上两种不同的实例化方式有什么区别呢?

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

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

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

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

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

     两种方式的区别在于将步骤1,2结合和分开来写。 

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

    1. class Student{
    2. String name;
    3. int age;
    4. public void tell(){
    5. System.out.println("姓名:"+ name +",年龄:" + age);
    6. }
    7. }
    8. public class TestDemo{
    9. public static void main(String args[]){
    10. Person per = null;//声明对象
    11. // per = new Person();//实例化对象
    12. per.name = "张三";//操作属性内容
    13. per.age = 30;//操作属性内容
    14. per.tell();//调用类中的tell()方法
    15. }
    16. }

    运行结果:

    此时,程序只声明了Student对象,并没有实例化Student对象。 


    3、默认初始化 

    在上边的图片中可以看到,类实例化对象之后,类中的属性,对象中就存在了,但是上述2步骤没有对对象进行初始化时,其中的属性都有默认的值,这是为什么呢?

    这是JVM为所开辟的空间进行的初始化,给属性附上相应的默认值。

    相应类型对应的默认值为:

    数据类型默认值
    byte0
    char'\u0000'
    short0
    int0
    long0L
    booleanfalse
    float0.0f
    double0.0
    referencenull

    这里默认初始化只是简单说一下,后边还会详细讲解 


     本篇文章,大部分内容借鉴了博主志见的内容,推荐大家可以点下边链接观看,博主讲解的内容思路特别清晰。
    原文链接:https://blog.csdn.net/wei_zhi/article/details/52745268

  • 相关阅读:
    centos7 离线升级/在线升级操作系统内核
    NoSQL之Redis
    软件性能测试方法有哪些?性能测试报告需要多少钱?
    卷积神经网络数学建模,常见卷积神经网络模型
    src挖掘之Tomcat未授权弱口令+war后门上传
    北亚数据恢复-WINDOWS还原系统后分区数量和大小不一致的数据恢复方案
    重生之我是一名程序员 35
    Java - AQS-CountDownLatch实现类(二)
    安卓USB模块源码分析(一)- 准备
    官宣出自己的博客啦
  • 原文地址:https://blog.csdn.net/m0_73067372/article/details/127798257