*本系列文章为《Java语言程序设计》必修课笔记。


教材

  • 教材

    • 王素琴,《Java语言程序设计实用教程》,中国电力出版社
  • 参考书
    • 肖波,《Java语言程序设计》,清华大学出版社
    • 陈国君,《Java程序设计基础》 ,清华大学出版社

Note

历史
  • 1996年初,Sun公司发布了Java 1.0
  • Java 5.0是对Java语言做出重大修改的版本(原来命名为1.5在04年JavaOne会议后版本变为5.0)

运行原理

  • Java既是编译型语言又是解释型语言

    • Java的源程序代码必须通过编译器将其编译为Java字节码后才能运行,所以称之为编译型语言
    • Java字节码不能直接运行,只能在Java虚拟机环境中被解释执行,因此称之为解释型语言。
  • Java程序是由虚拟机负责解释执行,并非是操作系统,这样做的优点是可以实现跨平台,也就是说针对不同的操作系统只需要编写一次程序,然后通过不同版本的虚拟机执行即可。.

语言特点

  • 简单性

    • 基本语法与C++语言极为相似,如常用的条件语言、循环语句和控制语句等。但Java语言摒弃了C++语言中不易理解的部分。
  • 面向对象
    • 是一种纯粹的面向对象程序设计语言,除了基本数据类型以外,都是对象。
  • 平台无关性
    • Java语言经编译后生成与计算机硬件结构无关的字节码,这些字节码不依赖于任何硬件平台和操作系统。
  • 安全性
    • 引入了实时内存分配及布局来防止程序员直接修改物理内存布局。通过字节码验证器对字节码进行检验,防止网络病毒及其它非法代码侵入。
  • 分布式
    • 包括数据分布和操作分布。数据分布是指数据可以分散在不同主机之上,而操作分布是指把一个计算任务分散到不同主机上进行处理。
  • 多线程
    • 能够并行处理多项任务,可以大大提高程序的执行效率。
  • 内存管理机制
    • 采用自动垃圾回收机制进行内存的管理,可以自动、安全地回收不再使用的内存块。’

与C/C++的区别

不再有全局变量。
不再有#include 和#define 等预处理功能。
不再有structure、union及typedef等。
不再有全局函数、指针、多重继承。
不再有goto语句。
不再有操作符重载(Operatior Overloading)。
取消自动类型转换,要求强制转换。
自动进行内存管理。

Java=“C++”-“复杂性和奇异性”+“安全性和可移植性”

语言平台

  • Java SE(Java Platform Standard Edition),为开发普通桌面和商务应用程序提供解决方案。
  • Java EE(Java Platform Enterprise Edition),为开发企业级应用程序提供解决方案。
  • Java ME(Java Platform Micro Edition),为在移动设备和嵌入式设备的应用程序提供解决方案。

虚拟机

Java虚拟机是运行Java程序的虚拟计算机,它解释Java字节码并执行代码要完成的操作。Java虚拟机与计算机硬件和操作系统相关,根据不同的操作系统开发相应的版本。
Java虚拟机由五部分组成,包括一组指令集一组寄存器一个栈一个无用单元收集堆一个方法区域

API

Java API是Java语言提供的类和接口的集合,目的是为应用程序与开发人员提供一套访问主机系统资源的标准方法。

Java开发工具包(Java Development Kit,JDK)是整个Java语言的核心,其中包括Java编译器、Java运行工具、Java文档生成工具和Java打包工具等。
Java程序运行时的环境工具JRE(Java Runtime Environment),Java虚拟机就包含在其中。
为了简化操作流程,在JDK中自带了JRE,这样开发人员只需要在计算机上安装JDK即可,不需要专门安装JRE工具。

*安装配置过程略,网上任意搜索一文档即可。

编程规范

  • 类名:首字母大写,多个单词合成一个类名时,每个单词的首字母要大写,如HelloWorld。
  • 接口名:命名规则与类名相同。
  • 方法名:常由多个单词合成,第一个单词首字母小写,其后每个单词的首字母都要大写,如showMessageDialog()。
  • 变量名:全小写,一般为名词,如name。
  • 常量名:基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,如PERSON_COUNT。

编译运行


*详细步骤略。
*IDE安装略


习题




习题答案

(1) C .class
(2) A Java不支持多继承
(3) B java.lang
(4) D
(5) C

(问答题答案见博客正文,仅供参考

Java语言特点:1.简单 2.面向对象 3.平台无关性 4.安全性 5.支持分布式 6.支持多线程 等(仅供参考)
Java程序开发步骤:编辑源程序编译生成字节码解释运行字节码


标识符

Java程序中使用的各种对象,如变量、方法、类、数组等都要有名字,这些名字称为标识符。Java语言的标识符是大小写敏感。
Java语言中的标识符必须满足以下条件:

  • 标识符只能包含字母、数字、下划线(_)和美元符号($);
  • 标识符必须以字母、下划线和美元符号开头。

在所有合法的标识符中,有一些标识符被Java语言赋予特定含义,不允许用户对其重新定义,这些标识符称为保留字(Reserved Word)。
在所有保留字中又有一些标识符对Java的编译器有特殊的意义,它们用来表示一种数据类型,或者表示程序的结构等,称之为关键字(Keyword)。

数据类型

Java语言中的数据类型分为基本数据类型引用数据类型两种。

  • 基本数据类型:

    • 声明变量后会立刻分配数据的内存空间
    • 在其中存储的是数据值,数据占用的内存空间大小是固定的,与软硬件环境无关。
  • 引用数据类型
    • 在声明变量时不会分配数据的内存空间,只会分配一个空间用来存储数据的内存地址

Java语言的字符采用Unicode字符集编码方案,每个字符占两个字节,以一个16位无符号整数来表示,取值范围是“\u0000”到“\uFFFF”,共65536个字符。

逻辑型数据只能取true和false两个值,并且不能与整型数据进行转换。
程序中出现的整型常量被看作int型,在内存中分配4个字节,如123。整型常量后面添加字母L或者l,被看作长整型常量,在内存中分配8个字节,如123L。
程序中出现的浮点型常量被看作为double型,在内存中分配8个字节,如1.23。
如果要将浮点型常量指定为float型,需要在它后面加上字母f或F,在内存中分配4个字节,如1.23f。
Java语言中数据类型转换分为自动类型转换强制类型转换,自动类型转换是由系统自动完成,不需要程序做特殊说明,而强制类型转换要求程序显式说明。



不同类型的数据转换规则:

  • 如果两个操作数中有一个是double型,则另一个操作数转换为double型;
  • 否则,如果两个操作数中有一个是float型,则另一个操作数转换为float型;
  • 否则,如果两个操作数有一个是long型,则另一个操作数转换为long型;
  • 否则,两个操作数都被转换为int型。

Notice

  • 即使是两个同为byte型的数据进行运算,也要先将两个数据转换为int型后再进行运算,运算结果也为int型。
  • 由于boolean型只有true和false两个数值,且与整型及字符型不兼容,所以不能对boolean型数据进行转换。

自动类型转换都是将低精度数据转换为高精度数据,但在实际情况中有时需要将高精度数据转换为低精度数据,如将double型转化为int型,此时需要通过强制类型转换完成。
Notice

  • 如果试图将一种类型的数据转换为另一种类型的数据,而又超出目标类型的表示范围,则会得到完全不同的数值。

运算符优先级

  • 整数被0除会产生异常,而浮点数被0除会得到无穷大,因为浮点数中的0是一个无限接近0的数值,并不是真正的0值,所以相除后会得到无穷大的数值。
  • Java语言中,取模运算%并不只限于整数之间的操作,也可以是浮点数,a%b与a-((int)(a/b)*b)的含义相同。取模支持对负数进行运算,运算结果的符号总是与被除数的符号保持一致


    x,y均为浮点型,进行相等比较时,要避免使用x==y,可以写为Math.abs(x-y)<1e-6,表示x与y的差值绝对值小于10-6。



    Java语言中,位运算符只能用于整型和字符型数据
    对于int型整数移位运算a>>b,由于int型长度为32个bit,系统先将b对32取模,得到的结果才是真正移位的位数,例如a>>33和a>>1的结果相同。对于long型整数,则是先将b对64取模。




    Java语言还提供了带标签的break语句,可以完成多重循环的跳转。

    continue 同理。

    一般情况下,不推荐使用带标签的break和continue语句。

Java语言内存分配的基本原理

  • 栈内存中存储基本数据类型、对象引用变量和数组引用变量,当超出变量的作用域之后,Java会自动释放这些变量占用的内存空间,该内存空间可以立刻被另作他用。
  • 堆内存用于存储数组和对象的数据。在堆内存中分配的内存,由Java虚拟机负责回收管理。
    在堆内存中创建一个数组或者对象时,一般会将其在堆内存中的首地址赋值给栈内存中声明的变量,这个变量就是数组或者对象的引用变量。
    为了使栈内存空间中的引用变量有初始值,Java提供了一个特殊的引用类型常量null,表示该引用变量不指向堆内存中的地址。

数组

Java语言将数组的定义分为数组声明数组创建两步。
数组声明是声明数组名和数组元素的类型,数组创建是为数组元素分配内存空间。

声明方式:

数据类型[] 数组名;
数据类型 数组名[];

方括号[]是数组的标志。在数组声明时并不为数组元素分配空间,只是在栈内存中为数组名(引用变量)分配了空间,但值未定。
数组创建格式为:

数组名 = new 数据类型[元素个数];
其中数据类型必须与数组声明中的数据类型一致,元素个数必须是整型常量。



数组一旦定义之后,就不能改变数组元素的个数,但是可以使数组名指向一个全新的数组空间,但原来的数组空间将丢失。

数组被看作是对象,它有一个属性length表示数组的长度。

foreach循环中只允许访问数组元素,而不允许修改数组元素。

如果是赋值元素而不是共用空间:

二维数组:

//声明
数据类型[][] 数组名;
数据类型[] 数组名[];
数据类型 数组名[][];
//创建
数组名 = new 数据类型[n][m];


Java语言中的二维数组中每一行的元素个数可以相同,也可以不同。如果元素个数相同,称为规则二维数组。如果每行元素个数不同,称为不规则二维数组,这时每行的一维数组都需要单独创建。
不规则二维数组创建方式:

         数据类型[][] 数组名 = new 数据类型[n][];数组名[0] = new 数据类型[m1];数组名[1] = new 数据类型[m2];︙数组名[n-1] = new 数据类型[mn];


二维数组初始化:

字符串

在Java语言中,字符串是用类的对象来表示的。
程序中用到的字符串分为两类,一类是创建之后不能再被修改的字符串,用String类对象来表示;另一类是创建之后允许被修改的字符串,用StringBuffer类对象表示。


采用new种形式创建的字符串对象,会在堆内存中为其分配空间,并且即使字符串对象与之前创建的字符串对象内容相同仍然会再次分配空间。

Java 笔记 # 一相关推荐

  1. 11.3-全栈Java笔记:线程的生命周期

    一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态 ...

  2. 10.4-全栈Java笔记:常用流详解(二)

    上节我们讲到「Java中常用流:文件字节流和字节数组流」,本节我们继续走起~  缓冲流 BufferedInputStream和BufferedOutputStream这两个流是处理流,通过内部缓存数 ...

  3. java笔记之抽象类和接口

    前言 java笔记之抽象类和接口是开发人员的设计工具 正文 1.抽象类 客观存在的一类事物,当这类事物都是抽象的,无法具体的描述. 1)语法: 修饰符 abstract class 类名{ } 2)特 ...

  4. 9.1-全栈Java笔记: 容器泛型—认识Collection接口

    开发和学习中需要时刻和数据打交道,如果组织这些数据是我们编程中重要的内容. 我们一般通过"容器"来容纳和管理数据.   事实上,数组就是一种容器,可以在其中放置对象或基本类型数据. ...

  5. java笔记(3):String(2)

    java笔记(3):String(2) 参考资料:网易云网课李兴华:http://study.163.com/course/courseMain.htm?courseId=1455026 一.字符串一 ...

  6. 4.8-全栈Java笔记:包机制

    包机制是java中管理类的重要手段. 开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理. 包对于类,相当于,文件夹对于文件的作用. package 我们通过 ...

  7. Java笔记07-List、Set、数据结构、Collections

    Java笔记07-List.Set.数据结构.Collections 主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 2.1 数据结构有什么用? 当你用着jav ...

  8. Java笔记05-Collection、泛型、迭代器

    Java笔记05-Collection.泛型.迭代器 [Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 第一章 Collection集合 1.1 集合概述 ...

  9. Java笔记04-核心类库

    Java笔记04-核心类库 Object类 1.1 常用的包 java.lang包 -该包是Java语言中的核心包,该包中的内容由Java虚拟机自动导入 如:String类,System类等java. ...

  10. Java笔记03-Constructor Override

    Java笔记03-Constructor & Override 构造方法基本概念 构造方法是类中的一种特殊方法 它是在类创建对象(实例化)的时候自动调用的方法 这个和python中的__ini ...

最新文章

  1. Unit24 What's on TV tonight?
  2. 访问的属性未定义_V8中的快属性
  3. PHP从零开始--循环数组
  4. 576. 出界的路径数
  5. Java基础学习总结(145)——Java SPI(Service Provider Interface)简介
  6. GitHub For Beginners: Don’t Get Scared, Get Started
  7. 网格系统常用的三种比例
  8. 被嘲笑、误导的AI应该得到认可
  9. python 爬虫性能_python-爬虫性能相关
  10. C语言程序设计学习心得体会总结
  11. 模拟c语言的软件下载,c语言软件下载(C/C++模拟学习)
  12. VMware增强型键盘驱动程序
  13. 自制汉化工具 文件提取/导入/压缩工具
  14. 详解线上线下收单业务(1)
  15. FILCO连接WIN10出现PIN问题
  16. mysql 段错误 (core dumped)_CentOS yum 段错误 (core dumped)解决办法
  17. 菜鸟教程C#高级教程
  18. 利用python脚本批量自动下载Sentinel-1(哨兵1号)数据
  19. Scanpy(四)使用ingest和BBKNN整合数据
  20. 英特尔AVX指令集解析

热门文章

  1. PS磨皮插件Ultimate Retouch Panel
  2. [转摘]太极拳精义述真
  3. 如何快速获取ListView的打气筒对象
  4. 【进阶一】Python实现MDCVRP常见求解算法——蚁群算法(ACO)
  5. ZBrush 4R7中为笔刷设置快捷键
  6. excel的日期和时间
  7. 那些被疯狂追求的女孩,后来怎么样了?
  8. 服务器多开虚拟机对网络要求,虚拟机多开到一定数量后网络不稳定或没网
  9. 执行perl时出现Undefined subroutine
  10. 三方app跳转APN设置提示“此用户无权修改接入点名称设置”解决方案