一、Java的特点:
Java是简单的:
不再有#include 和#define 等预处理功能
不再有struct,union及typedef
不再有函数、
不再有指针、不再有多继承(但可以多重继承)
不再有goto
不再有操作符重载(Operatior Overloading)
不再有全局变量 取消自动类型转换,要求强制转换
不再有手动内存管理
Java是安全的:取消了指针,自动内存回收。
Java是完全面向对象的:继承、封装、多态
Java是健壮的:Java的强制类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证
java 最大的特点和优势:
java 跨平台。
二、Java及C语言的跨平台对比:
Java跨平台需要先编译再解释成不同平台可以执行的字节码文件,且一次编译多处执行;而C语言直接编译成与本地平台相关的二进制数据文件,对于不同平台需要多次编译,多次执行。
1.java的跨平台原理:
jvm 的作用:
1:类加载
2:内存的管理。
3:解释给本地平台去执行字节码。
2.C语言的跨平台原理:
三、Hello World
public class HelloWorld{//HelloWorld是类的名字。要和文件的名字一致。
//类体
public static void main(String[] args){//应用程序的入口方法。俗称main方法,又叫主方法。格式是固定的。
//main方法体
System.out.println("Hello World!");
}
}
public:被访问的权限。
class:一个特殊的单词。
HelloWorld:类的名字。HelloWorld 要和文件的名字一致。
{}:类体
public static void main(String[] args){}:java 应用程序的入口方法。俗称 main 方法,主方法。格式是固定的。
main方法体:
System.out.println("Hello World!");
在系统的标准输出设备上打印双引号内部的内容。原样输出字符串的内容。并输出一个换行符。
DOS运行过程:
编译:javac HelloWorld.java--->HelloWorld.class
解释:java HelloWorld
为何不添加.class?
因为程序会从包含入口的类开始执行。所以只写类的名字即可。
四、进制:
1:在java 程序中 表示一个具体的数的时候。可以使用几种进制来表示?
四种: 二进制、八进制、十进制、十六进制。
//练习java 中程序的进制的表示形式
public class TestNumber{
// 入口方法 main
public static void main(String[] args){
//十进制表示10 将数字10 转换为数字对应的字符串,然后再打印。
System.out.println(10);
//二进制表示10 高位添加0b 表示这是一个二进制的数据 jdk 1.7增加的功能
System.out.println(0b1010);
//八进制 高位补0 代表是一个八进制的数据
System.out.println(012);
//十六进制 高位补0x
System.out.println(0xa);
}
}
2:二进制:
规则:逢二进一, 一个二进制位可以有2种不同的状态。[0-1]
在计算机学科中 ,一个二进制位一个0 或者是一个1 是 计算机的最小的存储单元。
一个二进制位称之为 1bit。 8bits 称之为一个字节 1byte。 可以有256(2^8)种状态。
0 1(一个二进制位的两种状态2^1)
00 01 10 11(两个二进制位的四种状态2^2)
000 001 010 011 100 101 110 111(三个二进制位的八种状态2^3)
3:十进制:用0-9 十个字符代表10种不同状态。多个十进制的位的组合来代表更多的不同的状态。
规则:逢十进一,一个十进制位可以有10种不同的表示形式[0-9].
4:八进制:
规则:逢八进一,一个八进制位表示的范围[0-7]
5:十六进制:
规则:逢十六进一 ,一个十六进制为表示的范围是[0-15],因必须只使用一个字符来表示 10~15。所以规定,使用[a-f][A-F]来代表 [10-15]
使用四种进制表示0-15
十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
6:进制转换:
1:任何进制到 十进制的转换
123 = 1* 10^2 + 2*10^1 + 3*10^0 = 1*100 + 2 * 10 + 3 * 1 = 100 + 20 + 3 = 123;
0b101 = 1*2^2 + 0 * 2^1 + 1 * 2^0
0715 = 7*8^2+ 1*8^1 + 5 = 448+13 = 461;
0xa3 = 10 * 16^1 + 3*16^0 = 163
2: 十进制到其他进制的转换。
十进制到二进制:除二取余法。逆序输出。
十进制到八进制:除八取余数
十进制到十六进制:除十六取余数
3.八进制和二进制规则:一个八进制位表示成3个二进制位,3个二进制位合成一个八进制位
101010<--->52
61<--->110001
4.十六进制和二进制的转换
规则:一个十六进制位表示成4个二进制位,4个二进制位合成一个十六进制位
0xae3<--->101011100011
五、机器码转码:原码--反码--补码
问:一个整数在内存中是以什么样的形式表示的?
答:首先内存中的表现形式计算机肯定能直接识别。这种表现的形式 称之为 机器码。
用一个字节来表示 机器码。
计算机科学中规定:用字节的最高位来代表符号位,0 代表是正数 1 代表负数。
A、原码机器码的表示数据的规则:
最高位为符号位,低7位为数值位。
10: 0000 1010
-10:1000 1010
计算机并不是使用原码来表示数据的。
缺点:1:有+0 和 -0 之分。 0000 0000 1000 0000
2:如果考虑符号位参与运算,那么在设计cpu的时候,会增加cpu的设计的难度。
B、反码:
规则:如果是正数,那么原码和反码一致。
负数,在原码的基础上,符号位不变,其他的二进制位 1 变0 0 变 1 取反。
10:0000 1010 --反码--> 0000 1010
-10:1000 1010--反码--> 1111 0101
C、补码:
规则:如果是正数,那么补码和原码一致。 三码合一。负数,先求原码,然后求反码,最后+1.
-10: 1000 1010--反码--> 1111 0101 --求补-->(+1) 1111 0110
-1:1000 0001--->1111 1110 ---> 1111 1111
优点:
1:没有+0 和 -0 之分
0000 0000
1000 0000 --> 1111 1111 --(+1 )--> 1 0000 0000
2:计算机在使用补码计算的时候,并没有把符号位当作符号位来看待,而是当作了普通的数值位来使用,计算的规则和数值位的规则一致。cpu 的设计很简单了。
计算机科学中广泛了采用了补码的形式表示数据。
规则:补码的补码是原码。
1111 1111 ---> 1000 0000 --(+1)--> 1000 0001
六、标识符
写程序的目的:数据的运算和处理。
那么在程序中如何去访问要处理的数据呢?
通常的做法是,给要处理的数据所在的内存起一个名字。通过名字来访问数据所在的内存区域。而这个内存区域的名字在java中就称之为:标识符。
一个标识符对应着内存中的一块区域。
1.基本的命名规范:
1:见名知意 通过标识符的名字要能体现标识符代表的内存区域的数据的性质。
举个栗子:年龄的数据:age 名字的数据:name
2:遵循驼峰命名法:多个单词构成标识符,单词的首字符要大写。
举个栗子:学生的年龄:studentAge。 stuAge。
3:尽量用英文单词命名。
不同种类的标识符的命名规范:
1.class 后的名字即类名:
首字符大写,遵循基本命名规范即可。
2.局部变量的命名规范:
首字符小写。
尽量不要使用单个字符作为变量名。
3.终态变量的命名规范:
所有字符全部大写,多个单词使用下划线分割。
2.标识符的命名规则:
1:首字符必须 26个英文字母的大小写形式、下划线、$。后面的字符多了[0-9]10个数字字符。
2:不能使用 java 语言中的关键字 (java 中具有特殊意义的单词符号) 。又称为保留字。
Public、class、static、void、final 等
3:标识符大小写敏感。即区分大小写。
4:标识符的长度没有限制。(不建议使用单个字符作为标识符,也不建议太长)。
5:不能使用 空格,# 等特殊字符。
例子:2name, a, nianling,你好, public,name.