Java学习总结之Java程序设计概述

一、走进Java

Java是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。它是功能完善的通用程序设计语言,可以用来开发健壮的任务关键的应用程序。现在,它不仅用于Web程序设计,而且用于在服务器、台式计算机和移动设备上开发跨平台的独立应用程序。

二、Java"白皮书"的关键术语

1) 简单性

Java语法是C++语法的一个“纯净”版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。其剔除了C++中许多很少使用、难以理解、易混淆的特性。目前看来,这些特性带来的麻烦远远多于其带来的好处。

2) 面向对象

简单地讲,面向对象设计是一种程序设计技术。传统结构化程序设计主要通过设计一系列的过程(即算法)来解决问题,即算法+数据结构=程序,先要确定如何操作数据,再决定如何组织数据使之便于操作。而面向对象程序设计将数据域(属性)和对数据的操作(方法)绑定在一个对象中,将数据放在第一位,然后再考虑操作数据的算法。

3) 分布式

Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。

4) 健壮性

Java的设计目标之一在于使得Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测(编译时检测),后期动态的检测(运行时检测),并消除了容易出错的情况。

5) 安全性

Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。使用Java可以构建防病毒、防篡改的系统。

6) 体系结构中立

Java源文件经过编译生成中间字节码文件(.class),这是一种体系结构中立的文件格式,精心设计的字节码不仅可以很容易地在任何带Java虚拟机(JVM)的平台上运行,而且还可以动态地翻译成本地机器代码,即Java程序可以"一次编译,处处运行"。当然,解释虚拟机指令肯定会比全速运行机器指令慢很多。虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程称为即时编译

7) 可移植性

与C和C++不同,Java规范中没有"依赖具体实现"的地方。基本数据类型的大小以及有关运算都做了明确的说明。例如,Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。

8) 解释型

Java源程序(.java)在编写完成后,经过编译生成中间字节码文件(.class),字节码文件被JVM解释执行,不同于C/C++等编译型语言,字节码被解释为机器代码后立即执行,不产生中间机器代码文件。

9) 高性能

尽管对解释后的字节码性能已经比较满意,但有些场合下还需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定CPU的机器码。

10) 多线程

多线程可以带来更好的交互响应和实时行为。我们非常关注并发性,因为我们不再追求更快的处理器,而是着眼于获得更多的处理器,而且要让它们一直保持工作。Java是第一个支持并发程序设计的主流语言。

11) 动态性

Java能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。在Java中找出运行时的类型信息十分简单。

三、名词释疑

JDK

即Java开发工具包(Java Development Kit),是编写Java程序的程序员使用的软件,包括开发和运行Java程序的软件。

OpenJDK

Java SE的一个免费开源实现,不包含浏览器集成或JavaFX

SDK

即Software Development Kit,是一个过时的术语,用于描述1998 ~ 2006年之间的JDK

J2

一个过时的术语,用于描述1998 ~ 2006年之间的Java版本

JRE

即Java运行时环境(Java Runtime Environment),是运行Java程序的用户使用的软件,它包含Java虚拟机但不包含编译器,为不需要开发只需要运行Java程序的用户提供。

Sever JRE

在服务器上运行Java程序的软件。

JVM

即Java虚拟机(Java Virtual Machine),用于解释执行中间字节码文件。

API

即应用程序接口(Application Program Interface),也称为库,包括为开发Java程序而预定义的类和接口。

IDE

即集成开发环境(Integrated Development Environment),是为了快速开发程序而提供的开发工具,编辑、编译、链接、调试和在线帮助都集成在一个图形用户界面中。

applet

能在Web浏览器中运行的Java程序称为Java小程序(applet)

Java SE

即Java标准版(Java Standard Edition),可以用来开发客户端的应用程序。应用程序可以独立运行或作为applet在Web浏览器中运行。

Java EE

即Java企业版(Java Enterprise Edition),可以用来开发服务器端的应用程序,例如,Java servlet和JavaServer Pages(JSP),以及JavaServer Faces(JSF)。

Java ME

即Java微型版(Java Micro Edition),可以用来开发移动设备的应用程序,例如手机。

JavaFX

开发Java GUI程序的框架,在Oracle的Java SE发布版本中提供。

四、JDK、JRE和JVM三者的关系

见大牛博客:JDK、JRE、JVM三者间的关系

五、创建、编译和执行Java程序的过程

Java源程序编写后被保存为.java文件,通过Java编译器编译生成字节码.class文件,字节码文件和所需的库代码被送去JVM解释执行。在执行一个Java程序时,JVM首先会用一个称为类加载器(class loader)的程序将类的字节码加载到内存中。如果你的程序中使用其他类,类加载程序会在需要它们之前动态地加载它们。当加载该类后,JVM使用一个字节码验证器(bytecode verifier)的程序来检验字节码的合法性,确保字节码不会违反Java的安全规范,以确保来自网络的Java程序不会篡改和危害你的计算机。

1.png

六、通过命令行编译、运行Java程序

在命令行里输入以下命令编译Java程序:
javac classname.java
编译成功后,使用以下语句运行程序:
java classname //注意此处不要加.class后缀
注意:如果提示命令不存在,应该先配置环境变量,在path中用分号和前面的内容分隔,然后加入jdk/bin的路径,因为java.exe,javac.exe文件都在该目录下。

七、注释

1) 行注释

行注释以//开始,不能跨行

2) 块注释

块注释以/*开始,以*/结尾,可以跨行

3) 文档注释

文档注释以/**开始,以*/结尾,添加方法是输入/**后回车即可,可以添加@author@version等参数,它能使用JDK的javadoc命令提取一个HTML文件(在控制台输入javadoc 文件名,然后会在执行目录下生成若干文件,打开index.html即可)。使用javadoc注释来注释整个类或整个方法,为了将这些注释提取出来放在一个javadoc HTML文件中,这些注释必须放在类或者方法头前面。要注释方法中的某一步骤,使用行注释//
更多文档注释内容详见:Java学习总结之对象与类

八、程序设计错误

1) 语法错误

在编译过程中出现的错误称为语法错误编译错误

2) 运行时错误

运行时错误是引起程序非正常中断的错误,即程序能通过编译,但在运行时环境检测到一个不可能执行的操作,就会出现运行错误。

3) 逻辑错误

当程序没有按预期的方式执行就会发生逻辑错误。

九、Java标识符

Java标识符用于命名类、接口、变量、常量、方法等,有如下规则:

  • 标识符是由字母、数字、下划线(_)和美元符号($)组成的字符序列
  • 必须以字母、下划线(_)或美元符号($)开头,不能以数字开头
  • 标识符不能是关键字(如public)或保留字(如goto)
  • 标识符不能是true、false或null等字面常量
  • 标识符可以为任意长度
  • 不要用字符$命名标识符,习惯上$只用于机器自动产生的源代码中

十、命名规范

注意:在命名时尽量避免采用缩写作为标识符,用完整的词汇会更具有描述性,比如numberOfStudents比numStds、numOfStuds或者numOfStudents要好。另外,Java是区分大小写的。

1) 类名和接口

使用Pascal命名法,每个单词的首字母大写,例如类名ComputeArea和System

2) 变量和方法

使用驼峰命名法,一个单词都小写,如有多个单词则第一个单词字母小写,后面每个单词的首字母大写,例如变量radius以及方法setRadius

3) 常量

大写常量的所有字母,如果有多个单词,单词之间用下划线连接,例如,常量PI和常量MAX_VALUE

十一、Java 与 C++ 的区别

  • Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 为了兼容 C 既支持面向对象又支持面向过程
  • Java 通过虚拟机从而实现跨平台特性,但是 C++ 依赖于特定的平台
  • Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
  • Java 支持自动垃圾回收,而 C++ 需要手动回收
  • Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承
  • Java 不支持操作符重载,虽然可以对两个 String 对象执行加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++ 可以。
  • Java 的 goto 是保留字,但是不可用,C++ 可以使用 goto。
  • Java 不支持条件编译,C++ 通过 #ifdef #ifndef 等预处理命令从而实现条件编译。

十二、Java8新特性

Java 8 特性 – 终极手册
Java 8 新特性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,443评论 25 707
  • 【蜕变新生】20170318学习力践行D3:1、昨天,听了学习力加课孩子高效能事物管理方法,只听了一个小时十分钟,...
    高汝鑫阅读 138评论 0 0
  • 我的祖辈并不是竹山村人,我的太太公从庆元县城的姚家村搬迁到竹山安家落户的。在一百五十年前,诺大的竹山村却住着寥寥无...
    柚稚妈妈阅读 2,792评论 77 154
  • 《童年》是一首描写童年纯真的一首歌,但更是回忆童年纯真的一首歌。 罗大佑曾经说这首歌:“旋律,几个小时就出来了,但...
    栀上清帆阅读 950评论 0 6