[TOC]
0x00 JAVA开发初识 Q:什么是软件开发?
软件:按照特定顺序组织的计算机数据和指令的集合;
开发:软件的制作过程 软件开发:就是借助开发工具和计算机语言来制作软件,比如使用Java编程语言可以完成应用软件的开发。
(1) JAVA 介绍 Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言(Java面向对象程序设计语言和Java平台的总称),其作者是詹姆斯.高斯林(James Gosling),他也被誉为是JAVA之父, 他是与SUN公司的Patrick/Naughton/Mike Sheridan
等人合作开发的一套语言,最开始叫”Oak”后改名为JAVA;
Java分为三个体系(1999年):
J2SE【Java的标准版本】: 基础,无论是以后走EE还是ME,SE是必须要精通的。 J2SE是SUN公司为java程序员准备的一套“基础类库”,这套基础类库学习之后,可以完成最基本的操作,例如,文件的读写、线程的控制
J2EE【Java的企业版本-强大】: 这是SUN公司为程序员专门准备的一套“类库”,这套类库可以协助程序员完成企业级软件的开发企业级软件:OA办公系统、进销存系统、超市系统
J2ME【Java的微型版本-很少使用】: 这是SUN公司为java程序员专门准备的另一套“类库”,这套类库可以协助程序员完成微型设备的嵌入式开发,Java最初就是做微型设备嵌入式开发的。
现代Java的三个体系模块更名(2005年): 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6,Java的各种版本已经更名以取消其中的数字”2”
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE)(Java2 Platform,Enterprise Edition,java平台企业版)
JavaME(J2ME)(Java2 Platform Micro Edition,java平台微型版)
Java语言特性:
开源、免费、纯面向对象。
开源:开发源代码,SUN公司编写的java类库的源代码普通程序员能看到。
免费
面向对象:提供类/接口和继承等面向对象的特性(只支持类之间的单继承,但支持接口之间的多继承(extends),并支持类与接口之间的实现机制(关键字为implements),全面支持动态绑定;
简单性:
与C语言和C++语言很接近很容易学习和使用
丢弃了C++中(操作符重载、多继承、自动的强制类型转换)
特别地Java语言不使用指针,而是引用)并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
健壮性:
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证(丢弃指针pointer),Java的安全检查机制使得Java更具健壮性。
动态的 -设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级,另外Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
分布式的
支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等,JAVARMI(远程方法激活)机制也是开发分布式应用的重要手段
安全的
提供了一个安全机制以防恶意代码的攻击,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
高性能的
与解释型的高级脚本语言相比,Java的确是高性能的。事实上Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
体系结构中立
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
java支持多线程
Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)
线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建;
通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程。
其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。
值得注意的是Thread类已经实现了Runnable接口,因此任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。
java自动垃圾回收机制即GC机制:【java运行过程当中有一个“垃圾回收器”一直在守护者。】
跨平台/可移植
跨平台:依靠JVM机制【java程序不和操作系统交互,java程序运行在JVM中,JVM和操作系统交互】
Java程序并没有和底层的操作系统直接交互,java程序实际上运行在jvm当中,JVM屏蔽了操作系统之间的差异。不同的操作系统中必须安装不同版本的JVM。
可移植:来源于体系结构中立性,Java严格规定了各个基本数据类型的长度;Java程序在Java平台上被编译为字节码格式,使得可以在java平台上的任何系统种运行;
Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
但是为了达到可移植,必须提前在操作系统中安装JRE,JRE有了之后才会有JVM。
weiyigeek.top-JAVA跨平台
总结:因为有了JVM所以同一个JAVA程序在三个不同的操作系统中都可以执行;这才使JAVA程序具有跨平台性与良好的移植性;
(2) JRE / JDK 介绍 三者之间的关系:JDK 中包含JRE,JRE中包含JVM+类库,简单的说就是JDK开发完成java程序交给JRE去运行;
JDK【Java开发工具箱| Java Development Kits】-编译工具javac.exe 和 打包工具 jar.exe
JRE【Java的运行时环境|Java Runtime Environment】
JVM【Java虚拟机】
Q:为什么JDK中要包含一个JRE呢? 答:开发完程序后,需要运行一下看看效果;
0x01 JAVA开发环境 安装环境:Java语言尽量保证系统内存在1G以上,其他工具如下所示: 注意:JDK的版本不同的操作系统需要安装不同版本的JDK
(1)本机安装
[TOC]
0x00 JAVA开发初识 Q:什么是软件开发?
软件:按照特定顺序组织的计算机数据和指令的集合;
开发:软件的制作过程 软件开发:就是借助开发工具和计算机语言来制作软件,比如使用Java编程语言可以完成应用软件的开发。
(1) JAVA 介绍 Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言(Java面向对象程序设计语言和Java平台的总称),其作者是詹姆斯.高斯林(James Gosling),他也被誉为是JAVA之父, 他是与SUN公司的Patrick/Naughton/Mike Sheridan
等人合作开发的一套语言,最开始叫”Oak”后改名为JAVA;
Java分为三个体系(1999年):
J2SE【Java的标准版本】: 基础,无论是以后走EE还是ME,SE是必须要精通的。 J2SE是SUN公司为java程序员准备的一套“基础类库”,这套基础类库学习之后,可以完成最基本的操作,例如,文件的读写、线程的控制
J2EE【Java的企业版本-强大】: 这是SUN公司为程序员专门准备的一套“类库”,这套类库可以协助程序员完成企业级软件的开发企业级软件:OA办公系统、进销存系统、超市系统
J2ME【Java的微型版本-很少使用】: 这是SUN公司为java程序员专门准备的另一套“类库”,这套类库可以协助程序员完成微型设备的嵌入式开发,Java最初就是做微型设备嵌入式开发的。
现代Java的三个体系模块更名(2005年): 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6,Java的各种版本已经更名以取消其中的数字”2”
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE)(Java2 Platform,Enterprise Edition,java平台企业版)
JavaME(J2ME)(Java2 Platform Micro Edition,java平台微型版)
Java语言特性:
开源、免费、纯面向对象。
开源:开发源代码,SUN公司编写的java类库的源代码普通程序员能看到。
免费
面向对象:提供类/接口和继承等面向对象的特性(只支持类之间的单继承,但支持接口之间的多继承(extends),并支持类与接口之间的实现机制(关键字为implements),全面支持动态绑定;
简单性:
与C语言和C++语言很接近很容易学习和使用
丢弃了C++中(操作符重载、多继承、自动的强制类型转换)
特别地Java语言不使用指针,而是引用)并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
健壮性:
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证(丢弃指针pointer),Java的安全检查机制使得Java更具健壮性。
动态的 -设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级,另外Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
分布式的
支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等,JAVARMI(远程方法激活)机制也是开发分布式应用的重要手段
安全的
提供了一个安全机制以防恶意代码的攻击,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
高性能的
与解释型的高级脚本语言相比,Java的确是高性能的。事实上Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
体系结构中立
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
java支持多线程
Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)
线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建;
通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程。
其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。
值得注意的是Thread类已经实现了Runnable接口,因此任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。
java自动垃圾回收机制即GC机制:【java运行过程当中有一个“垃圾回收器”一直在守护者。】
跨平台/可移植
跨平台:依靠JVM机制【java程序不和操作系统交互,java程序运行在JVM中,JVM和操作系统交互】
Java程序并没有和底层的操作系统直接交互,java程序实际上运行在jvm当中,JVM屏蔽了操作系统之间的差异。不同的操作系统中必须安装不同版本的JVM。
可移植:来源于体系结构中立性,Java严格规定了各个基本数据类型的长度;Java程序在Java平台上被编译为字节码格式,使得可以在java平台上的任何系统种运行;
Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
但是为了达到可移植,必须提前在操作系统中安装JRE,JRE有了之后才会有JVM。
weiyigeek.top-JAVA跨平台
总结:因为有了JVM所以同一个JAVA程序在三个不同的操作系统中都可以执行;这才使JAVA程序具有跨平台性与良好的移植性;
(2) JRE / JDK 介绍 三者之间的关系:JDK 中包含JRE,JRE中包含JVM+类库,简单的说就是JDK开发完成java程序交给JRE去运行;
JDK【Java开发工具箱| Java Development Kits】-编译工具javac.exe 和 打包工具 jar.exe
JRE【Java的运行时环境|Java Runtime Environment】
JVM【Java虚拟机】
Q:为什么JDK中要包含一个JRE呢? 答:开发完程序后,需要运行一下看看效果;
0x01 JAVA开发环境 安装环境:Java语言尽量保证系统内存在1G以上,其他工具如下所示: 注意:JDK的版本不同的操作系统需要安装不同版本的JDK
(1)本机安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 JDK -- 开发工具- https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html IDE:Eclispe/VScode -- 开发编辑器 http://www.eclipse.org/downloads/packages/ Java SE Development Kit 8u211 PS C:\Program Files (x86)\Java\jdk1.8.0_211> tree +---bin +---include +---jre +---lib +---src.zip C:\Users\Administrator>ECHO %path% C:\Program Files (x86)\Common Files\Oracle\Java\javapath; 变量名:JAVA_HOME 变量值:C:\Program Files (x86)\Java\jdk1.8.0_211 // 要根据自己的实际路径配置 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //记得前面有个"." 变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; $tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/local /$vi /etc/profile export JAVA_HOME=/usr/local /jdk1.8.0_211/export CLASSPATH=.:$JAVA_HOME /lib/dt.jar:$JAVA_HOME /lib/tools.jar;export PATH=$PATH :$JAVA_HOME /bin
(2)Cloud Studio 安装JAVA 补充:在 Cloud Studio 中运行 Java 程序对于老手来说,有些时候可能会面临在一台陌生的(配置没有 Java 环境)计算机下临时开发、调试代码。因此这里推荐基于腾讯云主机的在线云端开发工具 Cloud Studio 来快速开始你的 Java 项目。https://studio.coding.net/ step1:访问 Cloud Studio,注册/登录账户。 step2:在右侧的运行环境菜单选择:”PHP + Python + Java 三种语言环境” step3: 在左侧代码目录中新建 Java 目录进行开发
Tips: 从终端中输入命令可以看出 Cloud Studio 为我们集成了 Ubuntu16.04 + java1.8 的开发环境:
weiyigeek.top-
(3)Eclipse IDE 开发安装 集成开发环境 IDE (Integrated Development Environment): Eclipse和MyEclipse的区别:
a:Eclipse是一种可扩展的开放源代码的IDE。
b:Eclipse的特点描述
c:MyEclipse
在Eclipse基础上追加的功能性插件对插件收费
在WEB开发中提供强大的系统架构平台
Eclipse汉化(不推荐) 从Eclipse3.5开始,安装目录下就多了一个dropins目录,只要将Eclipse的汉化插件解压后放到到该目录即可。 同理这种方式卸载插件也是特别的方便推荐这种方式
0x02 JAVA基础知识 (1)我的第一个JAVA程序 创建文件 HelloWorld.java (文件名与类名尽量是一致), 代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World" ); } } >javac -encoding UTF-8 HelloWorld.java ## 该命令用于将 java 源文件编译为 class 字节码文件,会出现一个 HelloWorld.class 的文件 >java HelloWorld # java 后面跟着的是java文件中的类名(注意:java命令后面不要加.class) Hello World Hello World
weiyigeek.top-HelloWorld
Q:什么是类名? 答:答:假设硬盘上有一个文件 Hello.class , 那么类名就叫做 Hello,此时在命令行终端中可以利用java进行直接执行;
完整的Java程序的加载与执行:
Java 源程序与编译型运行区别:
weiyigeek.top-源程序与编译型运行区别
(2)JAVA程序书写语法
java是强类型语言严格区分大小写;
大括号要成对书写对齐,左括号前面是有空格;
缩进使用tab和四个空格
方法与程序块之间加上空行让程序看起来清晰
并排语句之间加空格,例如for语句,运算符两侧加空格
主方法入口所有的Java 程序由public static void main(String []args) 方法开始执行
(3)代码注释 注释概述:用于解释说明程序文字,提高程序阅读性,进行排错的功能,注意多行注释不能进行嵌套注释;1 2 3 4 - 单行注释: - 多行注释: - 文档注释:
(4) 关键字与标识符 关键字概述:
被JAVA语言赋予特定含义的单词,组成关键字字母全不小写;
注意事项goto和const作为保留字存在,目前并不使用;
标识符概述:
给类/接口/方法/变量等起名字使用的字符序列;
组成规则:英文字母大小写/ 数字/ $ 和 _ 字符;
注意事项:与其他语言一样不能使用数字开头,不能使用关键字,且变量名区分大小写;
案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 合法标识符举例:age、$salary、_value、__1_value 非法标识符举例:123 abc、-salary - 包package : 就是文件夹用于解决相同类名问,要求全部小写,一般是域名倒起写 com.java.www - 类或者接口:驼峰命名 一个单词:Demo 多个单词:DemoStudy - 方法与变量: 一个单词:demo 多个单词:demoStudy - 常量:(通常大写) 一个单词:MAX 多个单词:MAX_VALUE
0x03 JAVA语言学习 (1) 常量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class Demo_Constant { public static void main (String[] args) { final int DC = 1314520 ; System.out.println("abc" ); System.out.println(123 ); System.out.println(12.3 ); System.out.println('a' ); System.out.println(' ' ); System.out.print(true ); } }
(2) 进制概述 进制的由来概述:
weiyigeek.top-进制由来
常用进制转换的计算: 123 = 100 + 20 + 3 = 1 10^2 + 2 10^1 + 3 10^0 (系数 基数 ^ 权) 相加即可
系数:每一位上的数据
基数:X进制,基数就是X
权:从又右到左从0开始编号,对应位上编号即为该位的权
处积倒取余: 123 % 10 = 3 12 % 10 = 2 1 % 10 = 1
8421码及其特点:
8421码事BCD代码中最常用得一种;
这种编码方式中每一位二进制代码的1都是代表一个固定数值,把每一位1代表的十进制数加起来,所得的结果就是十进制数;
原码反码补码Q:为什么要学原码反码补码? 答:由于后面学习数据类型时候需要进行强制类型转换;
原码:二进制定点表示法,即最高位为符号位 0 表示正, 1 表示负,其余位表示数值大小; 比如 0 000 0111 = 7 | 1 000 0111 = -7
反码:正数的反码与其原码相同, 负数的反码时对其原码逐位取反(符号位除外)
补码:正数的补码与其原码相同, 负数的补码是在其反码的末尾加11 2 3 4 5 6 7 8 0 0000111 +7 正数原码(反码/补码) ----------------------------- 1 0000111 -7 负数原码 1 1111000 -7 负数反码 1 1111001 -7 负数补码 ----------------------------- 0 0000111 +7 正数反补 (相加为0) 1 1111001 -7 负数补码 (运算的时候都是用补码)
进制案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 class Demo_Scale { public static void main (String[] args) { System.out.println(0b100 ); System.out.println(0100 ); System.out.println(100 ); System.out.println(0x100 ); int decimal = 100 ; int octal = 0144 ; int hexa = 0x64 ; } }
(3) 变量与数据类型 Q:什么是变量?为什么要定义变量? 答:在程序执行过程中,在某个范围内其值可以发生改变的值; 用来不断存放同一类型的常量,并可以重复使用; 变量的定义格式:数据类型 变量名 = 变量名 比如:int count = 102
Java中主要有如下几种类型的变量:
局部变量
类变量(静态变量)
成员变量(非静态变量)
使用变量得注意事项:
作用域问题:同一个区域不能使用相同得变量名
初始化问题:局部变量在使用之前必须赋值(import)
一个语句可以定义几个变量:int a,b,c….;
Q:什么是JAVA基本数据类型? 答:变量就是申请内存来存储值,也就是说当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
weiyigeek.top-数据类型
Q:为什么有数据类型? 答:JAVA语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间;因此通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
JAVA数据类型分类:
基本数据类型
weiyigeek.top-数据类型
引用数据类型(面向对象部分)
实际上JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
案例1:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 class Demo_DataType { public static void main (String[] args) { byte b = 10 ; short s = 20 ; int i = 30 ; long x = 40 ; long x1 = 888888888888L ; float f = 12.36F ; double d = 33.67 ; char c = 'a' ; System.out.println(c); boolean b1 = true ; boolean b2 = false ; System.out.println(b1); int x2,y,z; x2 = 1 ; y = 2 ; z = 3 ; System.out.println(x2); } }
JAVA类型得取值范围:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 class Demo_DataTypeLength { public static void main (String[] args) { System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte" ); System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE+"\n" ); System.out.println("基本类型:short 二进制位数" + Short.SIZE); System.out.println("包装类:java.lang.Short" ); System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE+"\n" ); System.out.println("基本类型:int 二进制位数:" + Integer.SIZE); System.out.println("包装类:java.lang.Integer" ); System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); System.out.println("基本类型:long 二进制位数:" + Long.SIZE); System.out.println("包装类:java.lang.Long" ); System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); System.out.println("基本类型:float 二进制位数:" + Float.SIZE); System.out.println("包装类:java.lang.Float" ); System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); System.out.println("基本类型:double 二进制位数:" + Double.SIZE); System.out.println("包装类:java.lang.Double" ); System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); System.out.println("基本类型:char 二进制位数:" + Character.SIZE); System.out.println("包装类:java.lang.Character" ); System.out.println("最小值:Character.MIN_VALUE=" + (int ) Character.MIN_VALUE); System.out.println("最大值:Character.MAX_VALUE=" + (int ) Character.MAX_VALUE); } }
weiyigeek.top-类型取值范围
(4) 数据类型转换学习 自动类型转换: 整型、实型(常量)、字符型数据可以混合运算;运算中不同类型的数据先转化为同一类型然后进行运算,转换从低级到高级。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 低 ------------------------------------> 高 byte,short ,char —> int —> long —> float —> double Q:什么可以将long 强制转换到float ? long 8 个字节 / float 4 个字节通过IEEE 754 标准:float 代表了32 个二进制位 1 位表达符号位,8 位表达指数位, 23 位代表尾数位0000000 - 11111111 0 - 255 1 - 254 -126 - 127 long : 2 ^63 - 1 float : 3.4 *10 ^38 > 2 *10 ^38 > 2 *8 ^38 = 2 *2 ^3 ^38 = 2 *2 ^114 > 2 ^63 -1
两种类型转换机制:
强制类型转换
条件是转换的数据类型必须是兼容的。
格式:(type)value type是要强制类型转换后的数据类型
隐含强制类型转换
整数的默认类型是 int。
浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。
必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 class Demo_DataTypeConversion { public static void main (String[] args) { byte b = 3 ; int i = 4 ; i += b; System.out.println(i); byte b1 = 3 ; int i1 = 4 ; b1 = (byte )(i1 + b1); System.out.println(b1); byte b2 = (byte )(126 + 4 ); System.out.println(b2); byte bt1 = 3 ; byte bt2 = 4 ; byte bt4 = 3 + 4 ; System.out.println(bt4); float f1 = 12.34f ; long l1 = 123456 ; float f2 = l1; long l2 = (long )f1; System.out.println(f2); System.out.println(l2); char charword = 'A' ; int ch = charword + 1 ; System.out.println(ch); System.out.println("\'A\'+1 = " + charword + 1 ); ch = 97 ; char chr = (char )ch; System.out.println((char )48 +ch); System.out.print(chr+"\n" ); System.out.println((int )12.2132f ); System.out.println((float )12 ); System.out.println((double )ch); } }
数据类型转换必须满足如下规则:
不能对boolean类型进行类型转换。
不能把对象类型转换成不相关类的对象。
在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
转换过程中可能导致溢出或损失精度;
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如上面的float转成long类型7
(5) 字符char类型/字符串参与运算 Q:JAVA语言中char可以用来存储中文汉字编码码?为什么? 答:可以因为JAVA采用的Unicode编码,该编码中的每个字符占用两个字节(中文也是两个字节),所以可以存储一个中文汉字;
案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Demo_CharString { public static void main (String[] args) { System.out.println('a' + 1 ); System.out.println('a' + 1 + "K-BiuBiu" ); System.out.println("5+5=" +5 +5 ); System.out.println("5+5=" +(5 +5 )); char c1 = 97 ; char c2 = 65 ; System.out.println(c1); System.out.println(c2); char c3 = '中' ; System.out.println(c3); char a = '\u0001' ; String a = "\u0001" ; System.out.println("\u6182" ); } }
(6) 数字与字符串转换 描述:数字转换成为字符串与字符串转换成为数字进行案例1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import java.math.BigDecimal;class Demo_String { public static void main (String[] args) { double num1 = 1234.1234567 ; String snum1 = String.valueOf(num1); System.out.println("(1)整型 num1 采用string转换 成为字符串:" + snum1); System.out.println("(2)整型 num1 输出 成为字符串:" + num1); String s = "64" ; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = Float.parseFloat( s ); Double d = Double.parseDouble( s ); System.out.println("(3)字符串 s = " + s); System.out.println(b + " - " + t + " - " + i + " - " + l + " - " + f + " - " + d); String doubleStr = "44444.55555" ; BigDecimal bignum = new BigDecimal(doubleStr); String str = bignum.toString(); BigDecimal bd = bignum.setScale(2 , BigDecimal.ROUND_HALF_UP); System.out.println("str 的大数据类型值是: " + str + " 提取str的小数点后两位的值:" + bd); } }
0x04 JAVA运算符基本用法 Q:什么是运算符? 答:就是对常量和变量进行操作的符号;
运算符的分类:1 2 3 4 5 6 7 - 算术运算符 :+ - * / % ++ -- - 赋值运算符 := += -= *= /= %= - 比较(关系或条件)运算符: == != > < >= <= - 逻辑运算符 :&& & | ! ^ - 位运算符 :& | ^ ~ >> << >>> - 三目运算符 : - 字符串连接运算符 : +
算术运算符号的注意事项:
weiyigeek.top-
案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 class Demo_OperationalCharacter { public static void main (String[] args) { System.out.println( 10 / 3.0 ); System.out.println(-3 % 5 ); System.out.println(-3 % 3 ); System.out.println(-13 % 3 ); System.out.println(13 % 3 ); int a = 0 ; System.out.println(a++); System.out.println(++a); int x = 1 ; int y = (x++)+(++x)+(x*10 ); System.out.println(y); byte b = 10 ; b++; System.out.println(b); short s = 1 ;s += 1 ; System.out.println(s); System.out.println(4 == 3 ); int a1 = 10 ; int b1 = 20 ; int c1 = 30 ; System.out.println(a1 > b1 ^ b1 < c1); System.out.println(a1 < b1 ^ b1 < c1); System.out.println((a1++ == 3 ) && (++b1 == 4 )); System.out.println((++a1 == 12 ) || (b1++ == 4 )); System.out.println(a1); System.out.println(b1); System.out.println(6 & 3 ); System.out.println(6 | 3 ); System.out.println(6 ^ 3 ); System.out.println(~3 ); System.out.println(5 ^ 10 ^ 5 ); int change1 = 5 ; int change2 = 6 ; change1 ^= change2; change2 ^= change1; change1 ^= change2; System.out.println(change1); System.out.println(change2); System.out.println(12 << 1 ); System.out.println(24 >> 2 ); System.out.println(24 >>> 2 ); System.out.println(-24 >>> 2 ); int three = (change1 > change2)? 1 :0 ; System.out.println(three); int max = (a1 > b1) ? a1:b1; max = (max > c1) ? max:c1; System.out.println(max); } }
0x05 总结补充 Eclipse IDE 使用流程
1.Eclipse中如何生成jar包并导入到项目中 jar是什么?
jar有什么用?
用别人写好的东西,可以看做类似于Python中的模块包的功能,可以导入后使用里面的方法或者类;
如何打jar包?
选中项目–右键–Export–Java–Jar–自己指定一个路径和一个名称–Finish
weiyigeek.top-
如何导入jar包?
复制到项目路径的lib目录中下并添加至构建路径(add build path 构建后会在Refenrence Libraries之中),如果想移出也是相同操作只不过最后选择是remove build library;
weiyigeek.top-
如果导入项目到工作空间?
在项目区域右键找到import找到General,展开并找到Existing Projects into Workspace点击next然后选择你要导入的项目路径(需要注意不能项目重名);
注意:这里选择的是项目名称
2.Eclipse中断点调试的基本使用 描述: 程序调试是每一门编程语言必备的,它用来调试程序查看程序执行流程以及错误处理; Debug的作用: 调试程序以及查看程序执行流程 什么是断点:就是一个标记,从哪里开始。
如何设置断点?
你想看哪里的程序,你就在那个有效程序的左边双击即可。
如何运行设置断点后的程序?
右键 – Debug as – Java Application (或者点击小虫子也是可以的)
运行调试后将切换视图到Debug界面,下面是我们需要关注的地方:
Debug:断点测试的地方在F6或者点击也可以,一次看一行的执行过程。
Variables:查看程序的变量变化
ForDemo:被查看的源文件
Console:控制台
如何去断点?
a:再次双击即可找到Debug视图Variables界面找到Breakpoints,并点击然后看到所有的断点,最后点击那个双叉。
weiyigeek.top-