当前位置: 首页 > news >正文

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)

}

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

相关文章:

  • 配置android sudio出现的错误
  • 19-数据结构-查找-散列查找
  • 《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12周24期免费AI课程,炫酷3D LED点阵设计,MDK5.39发布
  • 文件操作及函数
  • 机器学习---Adaboost算法
  • 杰发科技AC7840——CAN通信简介(1)
  • 二百一十六、Flume——Flume拓扑结构之负载均衡和故障转移的开发案例(亲测,附截图)
  • Linux——基本指令(二)
  • 9:00面试,9:06就出来了,问的问题有点变态。。。
  • C++共享和保护——(1)作用域
  • docker二 redis单机安装
  • 鸿蒙开发 - ohpm安装第三方库
  • 飞天使-linux操作的一些技巧与知识点3-http的工作原理
  • Docker部署wordpress和Jenkins
  • NestJS的微服务实现
  • export和import的用法总结
  • httpie使用详解
  • Joomla 2.x, 3.x useful code cheatsheet
  • maven工程打包jar以及java jar命令的classpath使用
  • Spring-boot 启动时碰到的错误
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • vue--为什么data属性必须是一个函数
  • 彻底搞懂浏览器Event-loop
  • 力扣(LeetCode)965
  • 前端性能优化--懒加载和预加载
  • 强力优化Rancher k8s中国区的使用体验
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 1.Ext JS 建立web开发工程
  • ​flutter 代码混淆
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (1)Nginx简介和安装教程
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)模仿学习-完成后台管理页面查询
  • (译)2019年前端性能优化清单 — 下篇
  • (译)计算距离、方位和更多经纬度之间的点
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core中的去虚
  • .Net 高效开发之不可错过的实用工具
  • .NET 解决重复提交问题
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net6+aspose.words导出word并转pdf
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net与java建立WebService再互相调用
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [2544]最短路 (两种算法)(HDU)
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [Android]使用Retrofit进行网络请求