Java程序语言-程序员宅基地

技术标签: 学习  java  开发语言  

面向对象编程语言Java

1.Java语言的发展

Java是Sun公司推出的Java程序语言和Java平台的总称。Java技术广泛用于PC、智能手机、超级计算机和互联网。Java由4部分组成:Java程序语言、Java文件格式、Java虚拟机(JVM)、Java应用程序接口(Java API)。Java程序语言具有学习简单、面向对象、解释性执行、跨平台应用、多线程编程等特点。

注意:JavaScript语言与Java语言没有关系,JavaScript是一个独立的编程语言。

2.Java跨平台工作原理

1)Java语言跨平台的特性

lava语言跨平台的基本原理是:不将源程序(.iava)直接编译成机器语言,因为这样就与硬件或软件平台相关了,而是将源程序编译为中间字节码文件(.class);然后再由不同平台的虚拟机对字节码进行2次翻译,虚拟机将字节码解释成具体平台上的机器指令,然后执行这些机器指令,从而实现了“一次编写,到处执行”的跨平台特性。同一个中间字节码文件(.class),不同的虚拟机会得到不同的机器指令(如Windows和Linux的机器指令不同),不同的执行效率,但是程序执行结果相同。

2)虚拟机与跨平台性

虚拟机不是一台真实的计算机,而是建立一个致作运行环施。使某些程序能在这个环境中运行,而不是在真实的机器上运行。简单地说,虚现机是一种由数体实现的计算环境。现在主流高级语言如Java、C#等,编译后的代码都是以学节码的形式在在,这些了节码程序最后都在虚拟机上运行。
虚拟机的优点是安全性和跨平台性。可执行程序在虚拟机环境中运行时,虚拟机可以随时对程序的危险行为(如缓冲区溢出、数据访回越界等)进行控制。跨平食性是指,只要平台安装了支持这一字节码标准的虚拟机,程序就可以在达个平台上不加修改地运行。Java语言号称“一次编写,到处运行”,就是因为各个平台上的Java虚职机统一支持Java字节码,所以用户感觉不到虚拟机底层平台的差异。
虚拟机最大的缺点是占用资源多,性能差,不适用于高性能计算和欧入式系统。

3)Java与C/C++语言执行方式的区别

Java与C执行方式的区别在于:第一,C语言是编泽执行的,编泽器与平台相失,编译生成的可执行文件与平台相关;第二,Java是解释执行的,编泽为中间码的编译器与平台无关,编译生成的中间码也与平台无关,中间码再由不同的虚拟机解释执行,虚拟机是与平台相关的,也就是说不同的平台需要不同的虚拟机。
编译性语言(如C/C++等)将源程序由特定平台的编译器,一次性编泽为平台相关的机器码,它的优点是执行速度快,缺点是无法跨平台。解释性语言(如Python、PHP、JavaScript等)使用特定的解释器,将程序一行一行解释为机器码,它的优点是可以跨平台,缺点是执行速度慢,容易暴露源程序;编泽十解释性语言(如)ava、C#等)整合了编泽语言与解释语言的优点,既保证了程序的跨平台,又保持了相对致好的执行性能。同时虚拟机又可以解决垃圾回收(回收不使用的内存空间)、安全性检查(如内存溢出)等传统语言头疼的问题。微软公司的.Net平台也采用这种工作方式。

3.面向对象程序设计的概念

面向对象的基本思想是使用对象、类、方法、接口、消息等基本概念进行程序设计。

1)对象(Object)

对象是程序中事物的描述,世间万事万物都是对象,如学生、苹果等。对象名是对象的唯一标志,如学号可作为每个学生对象的标识。在Java语言中,对象的状态用属性进行定义;对象的行为用方法进行操作。简单地说,对象=属性十方法,属性用于描述对象的状态(如姓名、专业等);方法是一段程序代码,用来描述对象的行为(如选课、活动等);对象之间通过消息进行联系,消息用来请求对象执行某一处理,或者回答某些要求。需要改变对象的状态时,可以由其他对象向该对象发送消息。程序就是若干对象的集合。

2)类(Class)

类是具有共同属性和共同行为的一组对象,任何对象都隶属于某个类。使用类生成对象的过程称为实例化。例如,苹果、梨、橘子等对象都属于水果类。类的用途是封装复杂性。Java语言中的类可视为提供某种功能的程序模块,它类似C语言中的函数,类库则类似于C语言的函数库。不同之处在于类是面向对象的,而C语言没有对象的概念。

3)属性

属性是用来描述对象静态特征的一组数据。例如,汽车的颜色、型号、生产厂家等;学生的姓名、学号、性别、专业等。

4)方法

方法是一种操作,它是对象动态特征(行为)的描述。每一个方法确定对象的一种行为或功能。例如,汽车的行驶、转弯、停车等动作,可分别用move()、rotate()、stop()等方法来描述。方法与函数本质上是一回事,这两个名词没有严格区分。函数是程序设计层面的术语,而方法是软件设计层面的术语。

4.Java程序的结构

Java程序设计从类开始,类的程序结构由类说明和类体两部分组成。类说明部分由关键字class与类名组成;类体是类声明中花括号所包括的全部内容,它由数据成员(属性)和成员方法(方法)两部分组成。数据成员描述对象的属性;成员方法描述对象的行为或动作,每一个成员方法确定一个功能或操作。
例:编制Java程序,向控制台输出“hello,world”。源代码如下:

//文件名:helloworld.java        //1:Java程序注释,helloworld为文件名

Package mypack;        //2:Package是关键字,代表目录,mypack是包名

public class helloworld        //3:类声明,public class是关键字,helloworld是类名

{        //4:类体开始

        public static void main(String args[])        //s:方法声明

        {        //6:方法开始

        System.out.println("hello,world");        //7:方法(输出字符串)

        }        //8:方法结束

}        //9:类体结束

第2行,在Java中,类多了就用“包”(Package)来管理,包与存放目录一一对应。例如,Swing就是一个Java程序图形用户界面的开发工具包。
第3行,关键字public声明该类为公有类。关键字class声明一个类,标识符helloworld是主类名,用来标志这个类的引用。在Java程序中,主类名必须与文件名一致。
第5行,关键字public声明该方法为公有类。关键字atatie声明这个方法是静态的。关键字void说明main()方法没有返回值。标识符main()是主方法名,每个Java程序必须有且只能有一个主方法,而且名字必须是mainO,它是程序执行的入口,它的功能与C语音的主函数main()相同。关键字String args[]表示这个方法接收的参数是数组([]表示数组)。String是一个类名,其对象是字符串。参数args是数值名。
第7行,关键字System是类名,out是输出对象,Print是方法。这个语句的含义是;利用System类下的,out对象的.println()方法,在控制台输出字符串“Hello,World!”。
例:编制Java程序,计算从1+2+3+…+100的累加和。源代码如下:
//文件名:Sum.java        //Java程序注释

public class Sum  {        //类声明;类体开始

public static void main(String[]args)  {        //方法声明

        int s = 0,i = 0;  {        //变量声明,并将变量s、1初始化为0

        for(i <= 100;i++)        //for循环,对变量i进行递增

                s+=i;  }        //对和s进行累加

        System.out.println("累加和为:"+s):        //方法,输出提示信息和累加值

}  }        //方法结束;类体结束

5.面向对象程序设计的特征

1)封装

封装是把对象的属性和行为包装起来,对象只能通过已定义好的接口进行访问。简单地说,封装就是尽可能隐藏代码的实现细节。
例:人(对象)可以用下面的方式封装。

类  人  {

        姓名(属性1)

        年龄(属性2)

        性别(属性3)

        做事(行为1)

        说话(行为2)

}

封装可以使程序代码更加模块化。例如,当一段程序代码有3个程序都要用到它时,就可以对该段代码进行封装,其他3个程序只需要调用封装好的代码段即可,如果不进行封装,就得在3个程序里重复写出这段代码,这样增加了程序的复杂性。

2)继承

继承是一个对象从另一个对象中获得属性和方法的过程。例如,子类从父类继承方法,使得子类具有与父类相同的行为。继承实现了程序代码的重用。
例:如果不采用继承的方式,“教师”需要用下面的方式进行封装。

类  教师  {

        姓名(属性1)

        年龄(属性2)

        性别(属性3)

        做事(行为1)

        说话(行为2)

        授课(行为3)

}

例:例中“教师”的封装与例中“人”的封装差不多,只多了一个特征行为“授课”。如果采用继承的方式,“教师”可以用下面的方式封装。
子类  教师  父类  人  {

        授课(行为3)

}

这样,教师继承了“人”的一切属性和行为,同时还拥有自己的特征行为“授课”。

由例可以看到,继承要求父类更通用,子类更具体。

3)多态

多态以封装和继承为基础。多态是在抽象的层面上去实施一个统一的行为,到个体层面时,这个统一的行为会因为个体的形态特征的不同,而实施自己的特征行为。通俗地说,多态是一个接口,多种方法。多态性允许不同类的对象对同一消息作出响应。
例:“学生”也是“人”的子类,同样继承了人的属性与行为。当然学生有自己的特征行为,如“做作业”。如果采用继承的方式,学生可以用下面的方式封装。
子类  学生  父类  人  {

        做作业(行为4)

}

通过例可以看到,"人"是多态的,在不同的形态时,"人"的特征行为不一样。这里的"人"同时有两种形态,一种是教师形态,另一种是学生形态,所对应的特征行为分别是"投课"与"做作业"。多态的概念比封装和继承要复杂得多。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_75016108/article/details/134960762

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法