今天学习了进制转换的基本原理和方法,了解和学习的Java语言的语法基础以及ecplice的基本使用方法,明白了计算机数据储存的方式。
Java的三种核心机制:
- Java虚拟机(Java Virtual Machine)
虚拟机就是在真实机器中用软件模拟实现的一种虚拟机器。Java虚拟机代码被存储在 .class文件中;每个文件都包含最多一个public类。Java虚拟机可以理解成一个以字节码为机器指令的CPU。对于不同的运行平台,有不同的虚拟机。Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
- 垃圾收集机制Garbage Collection
Java编程语言解除了程序员取消分配存储器的责任,它可提供一种系统级线程以跟踪每一存储器的分配情况。在Java虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的存储器不再使用内存空间回收——垃圾回收在C/C++等语言中,由程序员负责回收无用内存。Java语言消除了程序员回收无用内存空间的责任,它提供了一种系统级线程跟踪存储空间的分配情况,并在JVM的空闲时检查并释放哪些可被释放的存储空间。垃圾收集在Java程序原型过程中自动运行,程序员无法精确控制和干预。
- 代码安全性检测Code Security
在运行时,执行机器只是将.class类文件通过交互后使用,一般情况下是看不到它的源代码.Java,如果想要看到.Java源程序,就要通过专用反编译工具,才能够看到。这就体现了Java在运行环境中相对其它语言来说,加强了代码的安全性
- Hello Java
1、一般考虑开发效率的情况下可以使用IDE集成开发环境工具,目前练习一天采用的是记事本之类的文本编辑工具,Centos下使用的是vi/vim
2、创建一个文本文件修改名称为Hello.java
3、Java是一个面向对象的编程语言,所以编写程序的开始就是定义类的开始,如果类是public类型的类,则类名称必须和文件名称一致(不包括后缀,包括大小写)
4、在命令行下执行编译,编译操作可以将程序.java转换为后缀为.class的二进制文件(字节码文件)
5、执行程序,语法为java 类名称。例如java Hello,注意这里是类名称,不是文件名称,所以没有后缀.classjava.exe就是解释器
- Java虚拟机中类加载的过程
系统会通过加载、连接、初始化三步来实现这个类进行初始化链接包括验证、准备以及解析三个阶段。
(1)验证阶段。主要的目的是确保被加载的类满足Java虚拟机规范,不会造成安全错误。
(2)准备阶段。负责为类的静态成员分配内存,并设置默认初始值。
(3)解析阶段。将类的二进制数据中的符号引用替换为直接引用。
javadoc用法:
Javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员、注释形成一个和源代码配套的API帮助文档
javadoc -d 目标文件夹abc Hello.java文件名
@author指定程序的作者
@version指定源文件的版本
@param方法的参数说明信息
@return方法的返回值说明信息
@see用于指定参考的内容
@exception抛出异常的类型
@throws抛出的异常,和
@exception同义
/**文档注释,使用javadoc命令可以生成html格式的说明文件
*@author 闫峻*@version 1.0.0*/
public class Hello{
//定义一个java类程序
/** * 主方法
* @param args数组用于接受命令行参数
* * @return 没有返回值
*//*多行注释可以添加多行的说明信息*/
public static void main(String[] args){
System.out.println("Hello Java!");
}
}
Eclipse的基本使用:
如果感觉启动比较慢的话大家可以修改该软件安装的配置文件eclispe.ini中的堆内存大小。
该软件是以工作区的形式管理所有的项目的,因此大家在启动的时候需要指定一个工作区的目录。注
意:该目录中不要包含中文或空格。
常用快捷键:
Alt+/ 内容提示
Ctrl+Alt+↓ 快速的复制当前行
Ctrl+Shift+F 格式化
Ctrl+/ 单行注释,再次使用取消注释
Ctrl+shift+/ 多行注释,取消注释Ctrl+shift+
Ctrl+shift+O 导包语句,该快捷键一次性可以导入多个包
Ctrl+1 快速修复错误,但是该快捷键只能修复小错误
Java语法基础:
Java语言的源程序代码由一个或多个编译单元组成,每个编译单元可包含三个要素:
1、一个包声明(可选)。 package com.yan; 命名空间
2、任意数量引入语句。 import java.util.*;
3、类的声明和接口声明 public class A{}
该三要素必须以上述顺序出现。也就是说任何引入语句出现在所有类定义之前;如果使用包声明,则包声明必须出现在类和引入语句之前。每个Java的编译单元可包含多个类或接口,但是每个编译单元最多只能有一个类或者接口是公共的一个文件中可以定义多个class,但是最多只能由一个public class,因为文件名称必须和public class类名称一致(大小写在内);当然在一个文件中的class名称不能重复【实际上在一个包中的类名称不能重复】,如果文件中没有public class,则文件名称没有约束
Java是一种自由格式的语言,可以用任意个空格、制表符、换行符隔开每个词同时也允许将多行代码写在一行上,注意使用分号隔开。所有的语句末尾以分号;收尾常见的编程错误。目前的要求:将所有的程序都必须写在方法内部,不能写在方法外使用临时变量,Java要求必须是先定义后使用,必须是先赋初值后使用
变量的定义:
变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。其中数据类型指明变量或表达式的状态和行为,数据类型决定了数的取值范围和运算符号变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。Java属于强类型编程语言,变量类型一旦声明,则不能进行修改。数据类型可以决定变量所需要的存储空间大小和对应的处理逻辑,作用域是指变量生效的范围,从定义的位置开始,到所在的{}结束为止,自动垃圾回收,一般来说java在一定程度上避免了内存泄漏问题。
JAVA是强类型语言:
每个变量有类型,每个表达式有类型,而且每种类型都是严格定义的。java编译器对所有的表达式和参数都要进行类型相容性的检查,以保证类型是兼容的。任何类型的不匹配都将被报告为错误而不是警。在编译器完成编译以前,错误必须被改正过来
在Java语言数据类型可以分为两大类:基本类型(原生类型primitive type)和引用类型(复合类型
referance type)
4类 整数: byte 1B short 2B int 4B long 8B 默认为int 特殊后缀L/l
浮点数: float 4B double 8B 默认double 特殊后缀 f/F D/d
字符: 单引号 2B unicode[java默认0-65535]
布尔: true、false
引用类型: 复杂类型
class/interface 数组 null
注意:null属于引用类型,所以int k=null;语法错误
计算机中的数据存储方式:
原码: 最高位为符号位,1表示负数,0为整数
反码:反码跟原码是正数时一样;负数时,反码就是原码符号位除外,其他位按位取反
补码:补码跟原码是正数时一样;负数时,补码就是原码符号位除外,其他位按位取反+1
-
整数类型:
byte,short,int,long 补码存储
byte字节整数 1B -128到127
short短整型 2B -32768到32767
int 整型 4B -2147483648到2147483647
long 长整型 8B -9223372036854775808到9223372036854775807
Java编程语言中的整数类型都是带符号的数字,不存在无符号整数。整数类型的文字可使用十进制、八进制和十六进制表示十进制整数。如123,-456,0
八进制整数。以0开头,如0123表示十进制数83,-011表示十进制数-9。十六进制整数。以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18。二进制整数,以0b或0B开头,例如0b10110010。整数类缺省为int类型,如在其后有一个字母“L”表示一个long值。例如long k=123456789012345678L;
实际上末尾的L或者l都可以,但是一般不建议使用l。 -
浮点数类型
两种浮点类型float和double
浮点数无法准确存放,所以浮点数不能进行等值判断
double d=0.;
for(int i=0;i<10;i++)
d+=0.1;
System.out.println(d);//输出数据为0.9999999999999999
double d = 0.;
for (int i = 0;
i < 10; i++)
d += 0.1;
if (1 - d < 1e-6)
System.out.println("计算结果为1");
else System.out.println(d);
float 4B 单精度浮点数 7-8有效数据 1.4E-45到3.4028235E38double 8B 双精度浮点数 15-16有效数据 4.9E-324到1.7976931348623157E308如果一个数包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数为浮点数十进制数形式。由数字和小数点组成,且必须有小数点,如0.123, 1.23, 123.0科学计数法形式。如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数针对货币的处理方案:使用可以精确存储任意位数的类型 BigInteger BigDecimal,缺点计算速度慢使用long类
3.字符类型char:
使用char类型可表示单个字符,字符是用单引号括起来的一个字符, ‘a’ 等
Java中的字符型数据是16位(2B)无符号型数据,它表示Unicode集,而不仅仅是ASCII集。其范围为0~
65535
char c1='a';//针对char类型使用单引号,双引号是字符串类型
//单引号中只能包含一个unicode编码的字符。如果'a1'语法错误
char c2='中';//字符类型可以等价于一个整数进行使用System.out.println(c2+1);
//输出20014
Unicode所定义的国际化字符集能表示迄今为止人类语言的所有字符集,它要求使用16位的宽度表示。
没有负数的char
Unicode字符的使用对于英语、德语、西班牙语或法语的语言是有些低效,因为这些语言能够被包含在8
位内。但是为了程序的的可移植性和通用性,付出代价是很有必要的
计算机处理字符类型时,是把这些字符当成不同的整数来看待。因此。严格说,字符类型也算是整数类
型的一种
数字(48-57)<大写字母(65)<小写字母(97)
Java也提供转义字符,以反斜杠(\)开头,将其后的字符转变为另外的含义
char c1='\u4e00';
System.out.println(c1);
System.out.println((char)(c1+1));
注意:用双引号引用的文字,就是平时所说的字符串类型不是原始类型,而是一个类(class)String,它被用来表示字符序列。注意String理论上说最大上限应该为4G长,但是实际上最多存储65534个字符字符本身符合Unicode标准,且上述char类型的转义字符适用于String
4.逻辑类型boolean:
boolean数据类型有两种文字值:true和false,只有1位
在Java编程语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算
boolean bb=true;//false,没有其他可能
System.out.println(bb+1);//语法报错的原因是:java中的boolean类型和其它类型之间没有关系
System.out.println(bb);
5.基本数据类型转换:
数据类型按精度取值范围从低到高排列顺序为:byte,short,char,int,long,float,double
当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型转换
当把级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算
int kk=100;
short bb=kk;//语法报错,因为int>short,所以需要进行强制转换
short kk=32767;//整数类型特殊,不需要进行强转
float f1=3.233;//语法报错,因为系统默认3.233为double类型
//解决方案1为 3.233f;方案2:强转 (float)3.233
显示转换格式为:(类型名)要转换的值; 在大转小的转换过程中可能损失精度
int k1=Integer.MAX_VALUE-1;
int k2=10000; //k1和k2之和已经超出了int可以存储的范围,所以数据溢出,计算结果错误
System.out.println(k1+k2);//-2147473650int
k1=123456789;
short k2=(short)k1;
System.out.println(k2);//-13035
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
public class A1 {
public static void main(String[] args) {
double d1=12345.678;
int kk=(int)d1;
System.out.println(kk); //计算结果为:12345
}
}