目前咱们具备一个开发Java程序的基本环境了,本章节来讨论一下关于Java语言的背景,特点,开发工具,以及开发流程等内容。
什么是程序
程序是模拟现实世界,解决现实问题!
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1] 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。
Sun Microsystems 于1995年推出的Java面向对象的程序设计语言
1996年发布JDK 1.0
1999年发布J2SE、J2EE、J2ME
2005年更名Java SE、Java EE、Java ME
2009年被Oracle收购 88亿$
2011年由Oracle发布Java 7.0
2014年由Oracle发布Java 8.0 [ 目前最为广泛 ]
… java 17
java 11后 jdk开始收费 BI 商业智能 openJDK http://openjdk.java.net/projects/jdk/
1.简单性
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载_(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
2.面向对象
Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。
Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
3.分布性
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
4.编译和解释性
Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。
在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。
5.稳健性
Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。
Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。
异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。
6.安全性
Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。
7.可移植性 跨平台
Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。
Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。
8.高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。
Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
9.多线程性
Java是多线程语言,它提供支持多线程的执行(也称为轻便过程)_,能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。
Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。
10.动态性
Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。 [24]
java在最初面世的时候最激动人心的就是 跨平台与垃圾回收机制了,跨平台实现了重复开发的问题,垃圾回收机制解放了程序员对于内存管理的复杂工作。4.1 跨平台机制
编译 : 指的是把源代码转换成字节码
解释 : 指的是把字节码指令交给CUP执行
JAVA 程序需要 先编译 后解释。
4.2 垃圾回收机制Garbage Collection垃圾回收:将不再使用的内存空间应当进行回收。
-
在C/C++等语言中,由程序员负责回收无用内存。
-
Java语言消除了程序员回收无用内存空间的责任:JVM提供了一种系统线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可以被释放的存储空间。
-
垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预。
通常对于初学者,为了体验编译过程,以及记忆语法,关键字等,建议使用基本工具2-3天,基本工具没有语法提示,稍微高级一点的有关键字高亮提示。5.2 集成开发工具
实际开发中不会使用它做开发,效率极低。 ![image.png](https://img-blog.csdnimg.cn/img_convert/34b92a6d504615aa53e9c99564d40b14.png#height=129&id=HFEuD&margin=%5Bobject%20Object%5D&name=image.png&originHeight=179&originWidth=936&originalType=binary&ratio=1&size=179988&status=done&style=none&width=677)
这类工具使开发变得非常容易,提供了,语法高亮显示,错误提示,封装了编译过程,并且集成了其他开发相关的工具,java开发领域常见的开发工具有这些。
![fff665ef94e6a15c0cbb0e32c37c1149.jpeg](https://img-blog.csdnimg.cn/img_convert/8f9e06a37bbde210e3e1c771fc394a71.jpeg#height=179&id=THQB6&margin=%5Bobject%20Object%5D&name=fff665ef94e6a15c0cbb0e32c37c1149.jpeg&originHeight=358&originWidth=457&originalType=binary&ratio=1&size=29819&status=done&style=none&width=229) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPY6N6eR-1659669512078)(https://cdn.nlark.com/yuque/0/2021/svg/12489399/1615863654609-9a5bec2a-14b4-4ead-9ae9-5a0c170ea56b.svg#height=166&id=HZsIi&margin=%5Bobject%20Object%5D&name=apache-netbeans.svg&originHeight=512&originWidth=444&originalType=binary&ratio=1&size=1847&status=done&style=none&width=144)] ![](https://img-blog.csdnimg.cn/img_convert/a9917a1d6a56a1a87758b1a2cfb6dd9e.png#height=170&id=gEFAs&originHeight=233&originWidth=268&originalType=binary&ratio=1&size=0&status=done&style=none&width=196)6.开发一个Java程序的步骤
6.1 类编写
java 关键字 - 又java内部使用的约束
class First{ } // 1 需要class 关键字 2 给类取一个名字 3 需要一对大括号 // ctrl+z 撤回 ctrl + x 剪切 ctrl+c 复制 ctrl+v粘贴 ctrl+a 全选 ctrl+s 保存
1 以点(.)java 结束的文件 被称为:源文件
2 以点(.)class结束的文件 被称为:字节码文件
3 用javac 命令 执行后得到class文件 我们称为:编译 javac+空格+源文件名.java
4 用java 执行class文件 我们称为:解释 java+空格+字节码文件名
Animal.java 源文件
//公共类 public class Animal{ //入口 public static void main(String[] args){ System.out.println("动物园"); } } //普通类 class Tiger{ //入口 public static void main(String[] agrs){ System.out.println("小老虎"); } } //普通类 class Pig{ //入口 public static void main(String[] args){ System.out.println("小佩奇"); } } //作业:动物园类 包含10种动物 【10 种动物的叫声....】
编译命令 : ** javac 源码代码文件**
javac Animal.java运行命令: java 字节码文件(没有后缀名)
java Animal
java Pig
java Tiger
一个源文件中可以编写多个模块(类) 但是只有一个类可以定义为public ,且这个类名字必须和源文件名字一样。每个模块都会生成一个字节码文件。
定义class(类)规范:
1 一个源文件中,可以定义多个class;
2 如果源文件中有一个public 类,那么要求文件名必须和public这个类名字保持一致;
3 一个源文件中有且仅有一个public类
扩展Windows 命令: ( 了解 )
- 切换盘符 盘符: 例如 d:
- 进入文件夹 cd 文件夹 cd ftp/day1
- 返回上一级 cd …
- 查看当前目录 dir
- 创建文件夹 md 文件夹
- 删除文件夹 rd 文件夹
- 删除文件 del 文件名
class First{ public static void main(String [] args){ System.out.print("Hello World!!!"); } }
编写规范:
1 编写我们的类,首先需要class关键字;提供类名字(规范要求:命名必须是英文单词;首字母大写;多个单词首字母大写);需要一对大括号({};{代表类开始;}类的结束)
2 入口方法(函数):java是入口方法是一个规约(规定):public static void main(String [] args){}
3 逻辑代码 (自定代码):需要放入到main方法中,并且要以分号(;)结尾
测试结果
注释,对代码起到解释和说明的作用,不参与执行,良好的注释习惯可以提高代码的可读性。
常见的注释:
单行注释 | // | 注释一行内容 |
---|---|---|
多行注释 | 注释多行内容 | |
文档注释 | 注释多行 可生成文档 |
8 关于命名规范javadoc -d . 源文件 生成API文档 【不会使用】
标识符的命名规范
凡是要取名字的地方都叫标识符,所谓标识符命名规范就是,我们在命名一些事物的时候的要求,这些要求有的是强制的有的是建议。
- 一个正确的标识符是由 数字、字母、下划线 _ 、$ 组成。**【强制】 ad_ $123 **
- 数字不作为开始 【强制】 b2c _12
- 不能使用关键字 [强制] class int for
- 多个单词使用驼峰命名法 【建议】 WelcomeToChina
- 类名 接口 首字母大写 ,方法名变量名首字母小写 【建议】
- 见名知意 【建议】
代码格式:规范
class Dog{ public static void main(String[] args){ System.out.println("HELLO"); } }
9 包的使用
- 结束括号对齐 开始括号同行 首字母
- 层级缩进
什么包? 包本质上就是文件夹,用于管理字节码文件。
包命名规范:
1 我们建议采用公司域名倒排序进行包创建(www.qf.com)
a 域名的好处,它本身就是唯一
b 包取名的方式:com.qf
c 包取名统一采用小写
张三 User = User.class
李四 User = User.class
老王 Dog = 使用的 User模块 问题来了 引入User模块 ,无法区分
这是就需要使用包来区分同名的类
王伟 成都的王伟 北京的王伟
Demo.java
//声明这文件中的模块将来的字节码生成到哪个包下 //在公司中 包名一般是公司的域名倒着写 package com.qf.java; class User{ public static void main(String[] args){ System.out.println("我是张三写的User类"); } }
带包编译:
javac -d . Demo.java
带包运行:
java com.qf.java.User
作业:
1、定义一个dog 类,要求给dog 输出给dog 喂食、撒尿和奔跑;
2、修改dog类,让dog只有 喂食和奔跑;
3、修改dog类,让dog在喂食后,休息30秒,才能奔跑,并且用jconsole进行监控;
4、输出dog 的javadoc文档;
5、让dog类生成:com.qf 带包层级的类;
6、阐述类命名规范、方法命名规范;
7、阐述类和方法的书写规范;
8、阐述java的三种注释 和 使用场景;