Java 面向对象语言基础

面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象 是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
在这里插入图片描述

1、 区分类、对象和对象的引用

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

:类是一个模板,它描述一类对象的行为和状态。

创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字new来创建一个对象。
  • 初始化:使用new创建对象时,会调用构造方法初始化对象。
public class Ch_4_1{public static void main(String[] args) {Pet a=new Pet();                  //根据Pet类创建出一个对象System.out.println("A Pet object is created.");a.name="Snoppy";                 //修改对象的状态,即对属性成员赋值a.showMe();                       //操控对象的行为(或调用对象对外提供的服务)}
}	  
class Pet{String name;            //定义成员变量void showMe(){          //定义成员方法System.out.println("Hi, I'm "+name +" !"); }
}

运行结果

A Pet object is created.
Hi, I'm Snoppy !

【说明】

  • 类中的内容统称为成员 ----> 成员变量、成员方法。
  • 只能通过引用名来操控对象,不能通过属性值。如本例中的a.name、a.showMe(),均为正确写法。
  • 一个Java文件可包含多个类,但是只能存在一个public修饰的类,因为文件名必须与public类同名。若无public类,则文件取名只要满足标识符命名规则即可。文件中每个类(或接口),编译后都会产生一个单独的.class文件与之对应。
  • 类成员可以缺省,俗称空类
class Species{}

对象和对象引用的内存管理

1、内存空间的自动管理机制:基于栈的内存管理模式

特色:栈空间的数据被系统自动管理,即在函数调用时自动创建数据空间,在函数运行结束时自动释放数据空间。栈空间中的数据与特定函数直接相关。程序员在函数中定义的所有变量,无论是基本类型还是引用类型,均存储在栈空间。
2、内存空间的手动管理机制:基于堆的内存管理模式

特色:在程序中给出申请或释放内存单元的指令,可实现内存单元的按需分配或释放。其中堆是一种无结构的内存区域,用于执行期间内存单元的动态分配和释放。所有对象均存储于堆空间。

2、 构造函数

关于java类中的构造方法:

  • 构造方法又被称为构造函数/构造器/Constructor

  • 构造方法语法结构:
    [修饰符列表] 构造方法名(形式参数列表){
    构造方法体;
    }

  • 普通方法的语法结构:
    [修饰符列表] 返回值类型 方法名 (形式参数列表){
    方法体
    }

  • 对于构造方法来说,“返回值类型不需要指定,并且也不能写void,
    只要写上void,那么这个方法变成普通方法

  • 构造方法的方法名必须和类名保持一致

  • 构造方法的作用?
    -构造方法存在的意义是,通过构造方法的调用,可以创建对象
    -初始化实例变量的内存空间

  • 构造方法应该怎么调用?
    -普通方法:方法修饰符中有static的时候:类名.方法名(实参列表)、方法修饰符列表中没有static的时候:引用.方法名(实参列表)
    -new 构造方法名(实参列表)

  • 构造方法调用之后,有返回值吗?

    每一个构造方法实际上执行结束后都有返回值,但是这个"return值;"这样的语句不需要写。构造方法结束的时候java程序自动返回值
    并且返回值类型是构造方法所在类的类型,由于构造方法的返回值类型就是类本身,所以返回值类型不需要编写
    
  • 当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器

  • 当一个类显示的将构造方法定义出来了,那么系统不再默认为这个类提供缺省构造器。建议手动提供

  • 构造方法支持重载机制。在一个类当中编写多个构造方法,这多个构造方法显然已经构成方法重载机制

public class ConstructorTest01 {public static void main(String[] args) {User u1 = new User();User u2 = new User(10);User u3 = new User("zhangsan");User u4 = new User(10,"zhangsan");//有static的方法调用,同一个类中类名可要可不要ConstructorTest01.dosome();dosome();//无static的方法调用,需要先创建对象ConstructorTest01 t = new ConstructorTest01();t.doOther();}public static void dosome() {System.out.println("do some!");}public void doOther() {System.out.println("do other!");}
}

运行结果
带有int类型参数的构造器
带有String类型的构造器
带有int,String类型的构造器
do some!
do some!
do other!

public class User {//无参数的构造方法public User(){System.out.println();}//有参数的构造方法public User(int i) {System.out.println("带有int类型参数的构造器");}public User(String name) {System.out.println("带有String类型的构造器");}public User(int i,String name) {System.out.println("带有int,String类型的构造器");}}

运行结果
构造函数 P() 被执行!
构造函数 B() 被执行!
构造函数 C() 被执行!

显然,若要构造出C的对象,必须先构造出其源自超类B的对象部分。同理,要构造出B的对象,则应先构造出A的对象部分。这说明在构造子类时,会自动调用超类的构造函数,调用次序与派生次序相同。

☁ 空指针引用
所谓空指针引用,就是当引用变量未关联任何对象时,却引用其成员。

public class Ch_4_7{public static void main(String[] args){C c=new C();//c.b=new B();c.b.a=new A();//System.out.println(c.b.a.x); //此句运行时报错C c1=new C();}
}class A { public int x;}class B { public A a; }class C { public B b; }

☁ 相等判断
对象相等有两层含义:
1)两对象实为同一对象,即对象的起始地址相同;
2)两对象不是同一对象,但对象的特定属性值对应相等。

/*本例表明:A的equals()与String的equals()功能不同;*前者作用等同于"==";*后者是判断“字符串字面量的值”是否相同;**/public class Ch_4_8{public static void main (String[] args) {A a=new A();    A b=new A();System.out.println(a==b);              //输出false。因为a、b指向不同的对象System.out.println(a.equals(b));      //输出false。因为a、b指向不同的对象String s1=new String("abc");String s2=new String("abc");System.out.println(s1==s2);          //输出false。因为s1、s2指向不同的对象System.out.println(s1.equals(s2));  //输出true。因为s1和s2存储的字符串值相同} 
}
class A{int x=5;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球首例!这台机器人发明了两项新技术,已获专利授权!

文章来源:EETOP几天前前人工智能系统专利申请权有最新发展。南非率先成为第一个授予人工智能专利权的国家,承认人工智能机器人DABUS为「发明者」,6日澳大利亚联邦法院也做出裁决:发明者可以是非人类。 这算是有历史里程碑意义的判…

成员变量、局部变量、实例变量、静态变量、类变量、常量

成员变量: 直接在类中声明的变量叫成员变量(又称全局变量) ▲ 初始化: 如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null…

行业洞见 | 一文了解自动驾驶汽车

文章来源:ancholabs.medium.com文字翻译: 新能源情报局封面配图:原作者驾驶是人类日常从事的活动中最困难的之一。遵循交通规则,通过眼神与其他司机沟通交流、对天气状况做出反应是成为优秀司机的先决条件。在自动驾驶汽车中&…

MATLAB高光谱图像处理基础

介绍高光谱图像的基本知识,便通过MATLAB对高光谱图像进行基本的处理。 文章目录前言一、高光谱图像二、MATLAB高光谱图像处理1.加载.MAT文件数据2.图像的显示3.图像维度变换总结前言 高光谱图像是一个立方体结构,维度为M x N x B,M为水平方向…

中国千亿科技巨头,成功收购英国最大芯片制造商!

来源:世界先进制造技术论坛内容来源:每日经济新闻综合自每经App、界面新闻、财联社等本期编辑:小艾 在全球缺芯的背景下,8月15日,国产芯片巨头闻泰科技(600745.SH)披露,旗下全资子公…

MATLAB图自编码器

通过MATLAB来实现图自编码器,用于高光谱图像特征的提取。 文章目录前言一、MATLAB相关知识二、编写算法1.图自编码器搭建2.可视化相关参数总结前言 算法输入数据: 图节点属性矩阵;邻接矩阵;概率p; W为自编码器的隐藏…

考夫曼:破解大脑代码并创建真正的人工智能

来源:CSDN博主「CDA数据分析师」原文链接:https://blog.csdn.net/yoggieCDA/article/details/1045567421955年,计算机科学家约翰麦卡锡(John McCarthy)首次创造了“人工智能”一词。当时,人工智能是对可以表…

MATLAB高光谱图像构建KNN图

在高光谱图像的特征提取过程中,采用非线性降维的方式对高光谱图像降维的过程中,采用图自编码器来对数据进行降维,需要将利用高光谱图像的结构信息和内容信息,则需要将高光谱图像数据构造为一个图结构,图结构的构建需要…

类脑量子叠加脉冲神经网络:从量子大脑假说到更好的人工智能

来源:神经现实作者:曾毅研究团队 |封面:Mario De Meyer排版:光影以深度神经网络为代表的现代人工智能模型在识别图像、语音、文字等模式信息任务取得优异表现。然而,生物大脑具有处理复杂多变的环境信息的能力&#xf…

遥感图像分类原理

1.原理 1.1 每一个像元作为一个样本,波段作为特征,理想情况下,同类地物应该具有相同或相似的特征描述,因此像元在n维特征空间中聚集在一起,而不同地物应该具有不同的特征描述,因此不同特征地物像元在n维空间…

2019第一次作业

10.实验代码 include <stdio.h> int main(void) { int i, f, X, N; scanf("%d",&N); int a [N]; scanf("%d",&X); f0; for(i0;i<N;i){ scanf("%d",&a[i]); if(a[i]X){ printf("%d",i); f; } } if(f0){ printf(&q…

分布式——ACID原则 CAP理论

分布式计算的原理 分布式计算就是将计算任务分摊到大量的计算节点上&#xff0c;一 起完成海量的计算任务。而分布式计算的原理和并行计算 类似&#xff0c;就是将一个复杂庞大的计算任务适当划分为一个个 小任务&#xff0c;任务并行执行&#xff0c;只不过分布式计算会将这些…

Matlab高光谱样本相关性分析

一.高光谱图像数据分析 1.分析光谱波段的相关性 1.1 对于维度为(m,n,b)的高光谱数据&#xff0c;使用reshape函数将其变换为(N,b)维度的&#xff0c;其中N m x n&#xff0c;表示像素数量&#xff0c;b表示波段数。 1.2 分析样本(像素)间波段的相关性&#xff0c;采用函数c…

万众瞩目的特斯拉AI日,会有哪些惊喜?

来源&#xff1a;华尔街见闻作者&#xff1a;方凌8月19日&#xff0c;特斯拉AI日即将举行。马斯克此前曾表示&#xff0c;此次AI日将展示特斯拉在人工智能方面硬件和软件开发的进展&#xff0c;并且招募顶级人才。活动的日子日渐临近&#xff0c;对于特斯拉究竟将在放出什么“大…

第一次会议(2019/02/22)

小组名称及成员介绍 小组名称&#xff1a;Triple兔成员介绍&#xff08;均为1703班&#xff09;项目经理&#xff1a;刘晓丽&#xff08;右上&#xff09;前端开发&#xff1a;刘晓丽&#xff08;右上&#xff09;、王亚群&#xff08;右下&#xff09;后端开发&#xff1a;乔疏…

JVM 工作原理和流程

作为一名Java使用者&#xff0c;掌握JVM的体系结构也是必须的。 说起Java&#xff0c;人们首先想到的是Java编程语言&#xff0c;然而事实上&#xff0c;Java是一种技术&#xff0c;它由四方面组成&#xff1a;Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Jav…

中国未来技术学院盘点

来源&#xff1a;科学网8月19日&#xff0c;上海交通大学未来技术学院正式揭牌成立。香港首富、宁德时代公司董事长曾毓群担任未来技术学院名誉院长&#xff0c;宁德时代首席制造官和工程制造及研发体系联席总裁倪军出任首任院长。一家市值超万亿的高科技龙头企业掌门人和高管&…

QT高级编程之QT基本概览

QT高级编程 主要从以下几个方面来介绍QT高级编程&#xff0c;并介绍QT相关的概念。 1、 QT部件Widget&#xff1b; 2、 QT信号与槽机制&#xff1b; 3、 对象树关系&#xff1b; 4、 布局管理&#xff1b; 5、标准对话框以及自定义对话框&#xff1b; 6、文件与目录&#xff…

计算机视觉中的自注意力

来源&#xff1a;机器学习研究组订阅自从引入网络以来&#xff0c;深度学习中的注意力机制在机器翻译和 社区中广受欢迎。然而&#xff0c;在计算机视觉中&#xff0c;卷积神经网络 (CNN) 仍然是常态&#xff0c;自注意力才刚刚开始慢慢渗透到研究的主体中&#xff0c;要么补充…

QT信号与槽-启动系统程序以及相关控件介绍

1.1 创建一个继承至QWidget的项目。 1.2 设计界面,分析界面采用的布局方式。 首先&#xff0c;每行控件采用水平布局方式&#xff0c;第三行为了使控件靠右&#xff0c;前面添加一个占位控件。三行采用垂直平局&#xff1b;选中控件&#xff0c;通过右键可以控件的布局方式&a…