Java
本博客仅用于记录自己学习,为其他人学习提供便利,如有不对,欢迎指正
文内主要参考java core 10 卷I 卷II,java语言程序设计 基础版 进阶版
学习目标
- 理解计算机基础知识,程序和操作系统
- 理解万维网(World Wide Web)之间的关系
- 理解Java语言规范,API,JDK,IDE的含义
- 能够编写简单的Java程序
- 在控制台显示输出字符串
- 理解Java程序的基本语法
- 创建编译运行Java程序
- 养成正确的编写习惯
- 解释语法错误/运行时错误/逻辑错误的区别
安装jdk方法
Windows/Linux安装JDK
1. 什么是计算机
计算机是存储和处理数据的电子设备
计算机包括硬件和软件两个部分.一般来说,硬件包括计算机看得见的物理部分,软件指为硬件提供指令,看不见的部分,软件为硬件提供指令,控制硬件完成特定的任务,软件和硬件不可分割.学习计算机编程语言,掌握硬件知识可以更好的理解程序中指令对计算机及其组成部分的功效.
计算机的组成部分
- 中央处理器(CPU)
中央处理器是计算机的大脑,CPU通常由两个部分组成:控制单元(control unit)和算术/逻辑单元(arithmetic/logic unit),CPU从内存获取指令,然后执行指令,控制单元用于控制和协调其他组件,算术/逻辑单元用于完成计算或逻辑比较
每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲,电子脉冲用于控制和同步各种操作,时钟速度越快,执行速度越快,时钟计量单位为赫兹(hertz Hz),1赫兹相当于每秒1个脉冲.现在计算机的时钟速度通常以千兆赫(GHz)来表述
- 内存(RAM)
计算机中的内存用于临时存储程序和程序所需要的数据,内存是计算机执行程序的工作区域,一个程序执行前,必须从硬盘内将程序移动到内中,CPU从内存中存取数据速度远快于从硬盘中存取数据
计算机中所有类型的数据(数字/字符)都被编码为字节序列,编码个解码过程自动完成,程序员不需要关心,例如在ASCII编码中,字符C是用一个01000011来表示.
0和1是计算机最基本的存储单元,bit,每一个0或1,称为一个bit位.
8bit=1B byte
1024B=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
内存中每一个字节都有唯一的内存地址,使用这个地址可以快速的确定字节的位置,从而快速的获取数据,因为可以任意顺序存取字节,所以内存也称为随机访问存储器(Random Access Memory)
- 存储设备
存储设备主要有三种类型,采用了与内存相同的容量单位
磁盘驱动器
磁盘驱动器一般指硬盘驱动器,硬盘(hard disk)用于永久的存储数据
光盘驱动器
光盘驱动器主要分为两种 CD(compact disc)和DVD,光盘驱动器主要类型有两种只读(DVD-R)和可读写(DVD-RW),光盘驱动器可以像硬盘一样,永久的存储数据
USB闪存驱动器
USB闪存驱动器即U盘(flash drive),是用于存储和传输数据的设备
-
输入输出设备
输入输出设备主要负责用户和计算机的通信,最常见的输入设备有键盘和鼠标,输出设备有显示器和打印机 -
通信设备
计算机通过通信设备进行联网,如拨号调制解调器(调制器/解调器)DSL,电缆调制解调器,有线网络接口卡,无线适配器等.
复习题
- 什么是硬件和软件
硬件指计算机中的物理部分,CPU,输入输出设备等
软件指控制硬件的程序指令等
- 列举计算机中主要硬件组成
中央处理器(CPU)
内存(RAM)
硬盘
键盘鼠标显示器
网卡
- 缩写CPU 代表什么含义
中央处理器(Central Processing Unit)
- 衡量CPU的速度的单位是什么
GHz 千兆赫兹
- 什么是比特? 什么是字节?
比特是计算机最基本的存储单元,指一个0或1表示的bit位,每8个bit位组成一个字节
- 内存和硬盘的主要区别是什么
内存主要负责和CPU交互,硬盘主要负责永久性存储数据
- 内存为什么被称为RAM
内存可以根据内存地址按任意顺序访问数据,所以被称为随机访问存储器(Random Access Memory)
2.编程语言
编程语言主要分为三类
- 机器语言
计算机的原生语言就是机器语言,即一套内嵌的指令集,机器语言由二进制代码的形式存储,人类不可读
- 汇编语言
汇编语言是机器语言的代替品,汇编语言使用短的关键词来代替机器语言的指令,再借助汇编器将汇编语言转换为机器语言
使用汇编语言编程,比机器语言容易,但汇编语言需要知道CPU的工作方式,汇编语言本质上非常接近机器语言,被认为是低级语言
- 高级语言
高级语言是一种平台独立,可以在不同类型的机器上运行的语言,高级语言很像英语目前较为流行的高级语言有由高级语言编写的源程序或源代码不能被计算机直接执行,需要通过翻译,转换为机器码执行,翻译工作由解释器或编译器完成,解释型语言如Python非解释型语言如Java
复习题
- CPU能理解什么语言
机器语言
- 什么是汇编语言
汇编语言是将部分机器语言指令由单词代替,接近于机器语言的低级编程语言
- 什么是汇编器
汇编器将汇编语言编译成机器语言,供机器执行
- 什么是高级语言
高级语言是现代计算机编程多用的语言,如Java ,C ,C++等高级语言源程序不能直接被机器执行,需要通过编译器或解释器,翻译称为机器语言执行,高级语言更像英语
- 什么是源程序
由高级语言编写,不经过编译的程序
- 什么是解释器
解释器是将源程序解释成机器语言的工具
- 什么是编译器
编译器是将源程序编译成机器语言程序的工具
- 解释语言和编译语言的区别是什么
解释语言是将源程序解释为机器语言然后执行
编译语言是将源程序编译为机器代码文件,由执行器执行
3 操作系统
操作系统是计算机上最重要的程序,操作系统用于管理和控制计算机的活动
目前主流的操作系统有
Windows
Mac OS
Linux
操作系统的主要任务
- 控制和监视系统的活动
- 分配和调配系统资源
- 调度操作
为了更高效的利用系统资源,提高系统性能,目前操作系统都支持多道程序设计,多线程和多处理
多道程序设计允许多个程序通过共享CPU同时运行,CPU速度比其他组件速度快得多,当CPU等待其他组件时,CPU就会处于空闲状态,可以供其他程序使用
多线程允许单个程序执行多个任务,CPU在执行多线程任务时,会在多个线程之间快速切换,使多个任务可以并发处理
多处理也称为并行处理,是指多个CPU同时执行一个任务,将多个CPU的执行结果合并获取整个任务的结果
复习题
- 什么是操作系统
操作系统负责监视和调配系统资源,操作系统负责用户和硬件之间的交互
- 举例流行的操作系统
Windows ,Linux ,MAC OS
- 什么是多道程序设计,什么是多处理,什么是多线程
多道程序设计指利用cpu的控线时间,允许通知执行多个程序
多线程指并发,一个程序允许同时执行多个任务
多处理指并行,指多个CPU之间配合同时完成一个任务
4.Java 万维网 其他
Java是一种功能强大和多用途的编程语言,可用于开发运行在移动设备、台式计算机及服务器的软件.
Java由James Gosling在Sun公司领导的小组开发,2010年Sun公司被Oracle收购,Java最初被称为Oak,是在1991年为消费类电子产品的嵌入式芯片而设计的.1995年更名为Java,并重新设计用于开发web应用程序.
Java特性: 简单的(simple)、面向对象的(object oriented)、分布式的(distributed)、解释型的(interpreted)、健壮的(robust)、安全的(secure)、体系结构中立的(architecuture neutral)、可移植的(portable)、高性能的(high performance)、多线程的(multithreaded)、动态的(dynamic)
Java是功能完善的通用程序设计语言,可以用来开发健壮的任务关键的应用程序,现在Java可用于web程序设计、服务器、台式计算机和移动设备上开发跨平台的独立应用程序.
万维网(World Wide Web,WWW)Internet作为万维网的基础架构已经四十多年,Java的程序可以在web浏览器中运行,这种能在web浏览器中运行的java程序被称为java小程序(applet).applet使用现在的图形用户界面与web用户进行交互,处理用户的要求,界面包括按钮、文本字段、文本域、单选按钮等.applet内嵌在HTML文件中.HTML是一种简单的脚本语言.
Java是一种功能强大的程序设计语言,可以用于开发台式机.服务器,移动设备上的应用程序,Android手机的软件也使用Java进行开发.
复习题
- Java是有谁发明?哪个公司拥有Java?
Java有James Gosling在Sun工资领导小组开发,2010年Sun工资被Oracle公司收购 - 什么是Java applet?
是一种能够运行在web浏览器中的Java小程序 - Android使用什么编程语言?
Java
5.Java语言规范、API、JDK和IDE
Java语言规范定义了Java的语法,Java库在Java API中定义.JDK是用于开发和运行Java程序的软件.IDE是快速开发程序的集成开发环境
Java有三个版本:
- Java标准版(Java Standard Edition,Java SE)用于开发客户端应用程序,应用程序可以独立运行或作为applet在web浏览器这所运行.
- Java企业版(Java Enterprise Edition,Java EE)用于开发服务器端应用程序,如Java servlet和JavaServer Pages(JSP),JavaServer Faces(JSF)
- Java微型版(Java Micro Edition,Java ME)用于开发移动设备的应用程序
Java SE是基础,其他Java技术都是基础Java SE
JDK是一套独立的应用程序的集合,每个程序都是中命令行调用,用于开发和测试Java程序,JDK包含了JRE(Java程序运行环境)、JVM(Java 虚拟机)、Java基础类库
开发人员使用JDK(包含JRE)
执行Java程序需要JRE
IDE是Java程序开发工具(例如NetBeans、Eclipse、IntelliJ IDEA)
IDE是为了快速开发Java程序而提供的集成开发环境的软件.编辑、编译、链接、调试和在线帮助都集成在一个图形用户界面中,只需要在一个窗口中输入源代码或打开已有的文件,通过按钮菜单选项或功能键就可以编译运行源代码
复习题
- 什么是Java语言规范
Java语言规范定义了Java的语法,Java API定义了Java库 - 什么是JDK
JDK是Java开发工具包,是一套独立的应用程序的集合,包含了JRE
-JDK和JRE的区别
JRE是Java程序运行环境,包括JVM虚拟机(java.exe等)和基本的类库等,JDK是Java程序的开发工具包,包括编译器(javac.exe)开发工具(javadoc.exe、jar.exe、keytool.exe、jconsole.exe)和更多的类库等。 - IDE是什么?
IDE是集成开发环境,是为了更快速开发Java程序而设计的软件
6.一个简单的Java程序
//第五行定义了一个类,每个Java程序中至少包含一个类
//public 类的修饰词,表示是一个公开的类,整个项目都可访问的类
//class是java的关键词,表示一个类
//Welcome是一个标识符,表示一个类名
public class Welcome{
public static void main(String [] args){
System.out.println("Welcome to Java");
}
}
该程序在控制台显示消息"Welcome to Java"控制台指计算机的文本输入和显示设备,控制台输入指从键盘输入,控制台输出指在显示器输出
每五行java程序中至少有一个类,但一个java源文件中,只能有一个public 类,类名需要以首字母大写开始,每个单词首字母大写,只能使用字母数字_$组成,且不能使用数字开始
第六行定义了主方法(main方法),程序执行从main方法开始,一个类可以包含多个方法,main方法是程序的执行入口
main方法中包含了一条语句System.out.println,该语句是想控制台输出消息 "Welcome to Java"是一个字符串(String编程术语),表示了一个字符串序列,一个字符串必须使用双引号,没调Java语句以 ; 结尾, ";"也称为结束符.
java中有很多对编译器有特殊含义的单词,这些单词被称为关键字或保留字,在java程序中,关键词不能用于其他用处.
例如 class 当编译器看到class时,编译器会认为class是一个类,后面一定是class的名字,所以class只能用于作为声明一个类
第一行是注释,注释解释了程序的作用,目的或其他帮助程序员理解的内容,注释是程序的一部分,但注释不会对编译造成影响,编译器会自动忽略注释
在Java中
使用//作为单行注释,即编译器会自动忽略//之后到行尾的所有内容
使用 /* / 作为区块注释,编译器会忽略第一个/ 到第一个*/之间所有的内容 例如
//我是单行注释
/*
我是区块注释
*/
程序中的{}一定成对出现,表示一个区块,也称为块,在Java中,所有块以{开始,以}结束,块可以嵌套
一个左括号一定会匹配一个右括号,任何时候,当输入一个左括号时,应立刻输入一个右括号,来预防可能会出现的遗漏错误,大多数IDE会自动的在每一个左括号后插入一个右括号
Java源程序严格区分大小写,Java关键字如果改为大写将出现错误 main方法是一个固定的特殊写法,将方法名改为Main就不再是程序的入口
写在后面的,为什么main方法要这样定义,为什么使用System.out.println语句,再后续学习会解答
Java中常见的特殊字符
复习题
- 什么是关键字?举例一些java关键字
关键字是被java保留的有特殊含义的,不允许被用作其他用途的单词,如 public class static void - Java是大小写敏感的吗?Java的关键字是大写还是小写?
java严格区分大小写,java的关键字小写 - 什么是注释,编译器会守注释影响吗?怎么写注释?
注释是写个其他程序员,用于解释或说明代码的内容,编译器会自动忽略注释
单行注释使用//开始 多行注释使用/* */ - 在控制台显示一个字符串的语句是什么?
System.out.println(“字符串”); - 给出以下代码的输出
public class Test{
public static void main(String [] args){
System.out.println("Hello World");//Hello World
System.out.println("1+1");//1+1
}
}
创建编译执行Java程序
java源程序的保存文件为.java文件,编译为.class文件,.class文件由Java虚拟机执行.
创建一个文档,书写java代码,编写源程序,保存为类名.java文件,通过命令编译为.class文件,执行.class文件
Java程序是通过 编写源程序(.java文件) 将源程序文件编译(.class文件),Java虚拟机执行.class文件,如果程序有错误,需要重新编写,编译,执行.
源文件的拓展名必须是.java,文件名必须和公共的类名完全相同,例如上个程序的文件名必须是Welcome.java
在编译和运行程序之前必须先安装和配置JDK,安装JDK的方法见
Windows/Linux安装JDK
编译文件的命令为
javac Welcome.java
执行命令为
java Welcome
警告:
在执行命令中,不需要拓展名.class如果命令中使用了
java Welcome.class ---->错误 NoClassDefFoundError
系统就会尝试执行Welcome.class.class,如果尝试执行一个不存在的类,就会出现NoClassDefFoundError错误
如果执行的类中没有main方法就出出现NoSuchMethodError
复习题
- 什么是java源程序的后缀名?什么是java字节码文件的后缀名?
.java是源程序的后缀名,.class是java字节码的后缀名 - 编译Java程序的命令是什么
javac 类名.java - 运行java程序的命令是什么
java 类名 - 什么是JVM?
jvm是Java的虚拟机,用于执行.class文件 - Java可以运行在任何机器上吗?在以太计算机上运行java需要什么?
Java可以运行在任何装有JRE的机器上,运行java程序需要java程序运行时环境(JRE) - NoClassDefFoundError错误是什么?
JVM尝试执行一个不存在的类就会出现NoClassDefFoundError
可能是执行命令写错了文件名 - NoSuchMethodError错误是什么?
JVM尝试执行一个不包含main方法的类就会出现NoSuchMethodError
可能是main方法没有正确的书写,或执行的类中不包含main方法
7.程序设计风格和文档
良好的程序设计风格和正确的文档是程序更易阅读,并且能帮助程序员避免错误
程序设计风格决定了程序的外观,把整个程序写在一行,它也能正确的编译执行,但是这是一个非常不好的设计风格,程序的可读性很差,文档是关于程序的解释型评注和注释的一个结构体.程序的设计风格和文档的编写和写代码一样重要.良好的程序设计风格和适当的文档可减少出错的几率,提高程序的可读性.
- 正确的注释和注释风格
在程序的开头写一个总结,解释程序的作用和主要特征以及用到的独特技术. 在较长的程序中还要添加注释,介绍程序每一个主要步骤并解释每一个难以读懂之处,注释要写的简明扼要,不能让程序充满注释而使程序难以读懂.
出了单行注释(//开始)和块注释(以/开始 /结尾)之外,Java还支持一种Java文档注释(Javadoc comment)的特殊注释形式.javadoc注释以/ 开始,以*/结尾.文档注释可以被JDK的javadoc命令提取成一个HTML文件.获取更多的信息.
使用javadoc注释(/**…*/)来注释整个类或方法,为了将这些注释提取,文档注释必须放在一个类或方法的前面,注释方法中的某一部分,使用行注释. - 正确的缩进和空白
保持一致的缩进风格会使程序更加清晰易读,易于调试回头维护.
缩进用于描述程序组成部分或语句之间的结构性关系.在嵌套结构中,每个内层的组成部分或语句,应该比外层部分缩进两格. - 块的风格
块是由一对{}组成,通常有两种方式:
选择拿一个风格都是可以采纳的,单应该采用一种风格,不应该讲两种风格混合使用.
8.程序中的错误
程序中的错误可分为三种:语法错误/运行时错误/逻辑错误
语法错误:
在编译过程中出现的错误称为语法错误或编译错误.语法错误是由创建代码是的错误引起,例如写错关键字,漏写符号,语法错误很容易被发现,编译器也会提醒错误在哪
运行时错误:
运行时错误是引起程序非正常中断的错误.程序在运行时,检测到一个不可执行的操作,就会引起运行时错误,例如需要访问网络,而没有网络,以0作为除数,或希望用户输入的是一个数值,而用户输入的不是数值等.
逻辑错误:
当程序没有按预期的方式执行,就会产生逻辑错误,例如 执行结果和预期结果不一样
通常情况,编译器可以明确指出错误位置和错误原因,所以语法错误很容易纠正,在程序运行时,程序异常中止,错误的原因和位置也会提示,逻辑错误不会有任何提示
常见错误
- 遗漏括号
- 遗漏分号
- 遗漏引号
- 大小写拼写错误
复习题
- 什么是语法错误(编译错误)/运行是错误和逻辑错误?
语法错误是指编译时引起的错误,通常是因为写错或漏写引起
运行时错误是在程序执行时,执行到一个不可执行的操作就会引起运行时错误
逻辑错误是程序的执行结果和预期结果不一致 - 如果字符串没有引号会引起什么错误
语法错误(编译错误) - 如果程序需要读取正数,而用户输入了字符串,程序会遇到什么错误?
运行时异常 - 如果编写一个求体积的程序,但错误的写成求面积的程序,属于什么错误?
逻辑错误
本章小结
- 计算机的存储和处理数据的设备
- 计算机包括硬件和软件两部分
- 硬件是计算机中的物理部分
- 计算机程序(软件)是一些不可见的指令,用于控制硬件完成任务.
- 计算机程序设计就是编写让计算机执行的指令(代码)
- 中央处理器(CPU)是计算机的大脑,从内存中读取并执行指令
- 计算机使用0和1
- 一个比特是指二进制数0或1
- 一个字节指8 bit的序列
- 内存 存储了CPU要执行的数据和指令
- 内存单穿是字节的有序序列
- 内存是临时存储,断电时数据丢失
- 程序和数据永久存储在硬盘中,当计算机需要使用时,就会将数据移动到内存
- 机器语言是一种内嵌在计算机的原始指令集
- 汇编语言是一种低级语言,使用一些特殊单词便是机器语言的指令
- 高级语音类似英语,需要被编译后才能执行
- 编译器是将高级语言翻译成机器语言的软件
- 用高级语言编写的程序称为源程序
- 操作系统控制了计算机的活动
- Java与平台无关,可以运行在任何装有JRE的设备上
- Java源程序文件必须和类名保持一致,以.java结尾
- 每个类都会被编译成一个字节码文件(.class文件),文件名与类名相同或与源程序名相同,以.class结尾
- javac命令用于编译
- java命令用于执行
- 每一个Java程序都是一个类的定义集合,关键词class,类的内容包含在{}内
- 方法包含在类内,程序的入口是main方法
- Java的语句以;结束
- Java的保留字(关键字)被java占用,不能用于用处
//单行注释 /*多行注释 块注释*/ /**文档注释 */
- Java严格区分大小写
- 错误分为三类,语法错误(编译错误),运行时错误,逻辑错误
编程练习题
- 编写程序,显示Welcome to Java 显示Welcome to Computer 显示 Programming is fun
public class Test{
public static void main(String[]args){
System.out.println("Welcome to Java");
System.out.println("Welcome to Computer");
System.out.println("Programming is fun"):
}
}
- 编写程序 显示Welcome to Java五次
public class Test{
public static void main(String[]args){
System.out.println("Welcome to Java");
System.out.println("Welcome to Java");
System.out.println("Welcome to Java");
System.out.println("Welcome to Java");
System.out.println("Welcome to Java");
}
}
public class Test{
public static void main(String[]args){
for(int i=0;i<5;i++)
System.out.println("Welcome to Java");
}
}
- 编写程序,显示如图团
public class Test{
public static void main(String[]args){
System.out.println(" J A V V A");
System.out.println(" J A A V V A A");
System.out.println("J J AAAAA V V AAAAA");
System.out.println(" J J A A V A A");
}
}
- 编写程序 计算宽度为4.5 高度为7.9 的矩形的面积
public class Test{
public static void main(String[]args){
System.out.println("矩形的面积为:"+(4.5*7.9));
}
}
public class Test{
public static void main(String[]args){
System.out.printf("矩形的面积为%d",4.5*7.9);
}
}