黑马程序员
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
一. 什么是软件
软件是一系列按照特定顺序组织的计算机数据和指令的集合。程序设计的最终结果是软件。
系统软件: 系统软件为计算机使用提供最基本的功能.
例如: DOS, Windows, Linux, Unix, Mac OS, Android, iOS
应用软件: 系统软件并不针对某一特定应用领域。而应用软件则相反,不同的应用软件根据用户和所服务的领域提供不同的功能。
例如: Word, Excel, PPT, QQ, FeiQ, 凌波, UltraEdit, Eclipse
二. 什么是计算机语言
计算机语言指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。
为了使电子计算机进行各种工作,就需要有一套用于编写计算机程序的数字、字符和语法规划,由这些组成计算机指令就是计算机语言。
软件就是由若干条计算机语言所组成的。
三. 计算机语言分类
机器语言:
机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。
汇编语言:
汇编语言是使用一些特殊的符号来代替机器语言的二进制码,计算机不能直接识别,需要用一种软件将汇编语言翻译成机器语言。
高级语言:
使用普通英语进行编写源代码,通过编译器将源代码翻译成计算机直接识别的机器语言,之后再由计算机执行。
2.JDK与JRE
JDK(Java Development Kit)
Java开发工具,包含开发Java程序的所有组件,包含JRE
JRE(Java Runtime Environment)
Java运行环境,如果要运行Java程序,就需要JRE的支持
常用组件:
src.zip Java是一门开源的语言,其源代码都在这个压缩包中
rt.jar Java的基础核心类库,我们编写Java程序时使用的class都在这个jar包中
javac.exe 编译器,将.java源代码编译为.class文件
java.exe 虚拟机,运行Java程序的工具
jar.exe 将class文件打成jar包的工具
javadoc.exe 生成帮助文档的工具
3. JDK版本
JDK1.0、JDK1.1、JDK1.2、JDK1.3、JDK1.4、JDK5.0、JDK6.0
JDK5.0即为JDK1.5,此版本较1.4大幅变更,因为非常强大,取名叫老虎(Tiger)版,也从1.4升级为5.0
JDK6.0即为JDK1.6,官方版本为6.0但很多人习惯叫1.6,此版本名为野马(Mustang)
4. 环境变量
环境变量是指在操作系统中用来指定操作系统运行环境的一些参数
环境变量三类
系统环境变量(优先级高于用户环境变量,系统环境变量不能引用%%用户环境变量)
path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
path:
如果想在任意目录下运行一个程序,我们就需要将程序所在的路径配置在path环境变量中。
通常我们会将javac.exe所在目录配置到path中,因为我们需要在任意目录下都能编译Java源文件。
配置完成之后可以在命令行输入javac测试,如果显式帮助信息则是配置成功。
用户环境变量
JAVA_HOME=D:\Program Files\Java\jdk1.6.0_23
path=%JAVA_HOME%\bin
临时环境变量
classpath:
Java虚拟机运行时加载类的路径。JDK5之后不配置默认为当前目录“.”。如使用JDK1.4或以下版本时需要人工配置。
暂时不需要配置,默认加载当前目录下的所有class文件。
配置方式:
JVM查找类文件的顺序:
a. 命令行
点击屏幕左下角开始 – 运行 – 输入cmd – 在命令行中直接输入命令进行修改
查看变量值:set 变量名
设置变量值:set 变量名=变量值,多个值之间使用分号“;”分割,引用变量时使用“%变量名%”形式
注意:此种方式仅适用于当前窗口
b. 我的电脑
鼠标右键点击我的电脑 – 属性 – 高级 – 环境变量
找到要修改的变量将其值修改,此种方式永久有效
注意:
配置环境变量之后可以查看编译器(javac.exe)和虚拟机(java.exe)版本,虚拟机版本不能低于编译器。
使用哪个版本的编译器和虚拟机取决于path环境变量,如果虚拟机版本过低,可以通过环境变量来修改。
编译器版本查看方式:javac –version
虚拟机版本查看方式:java –version
五.第一个Java程序
1. 编写源代码
新建文本文档,扩展名改为.java,在文件中写入代码。
a,通过class关键字定义一个类。将代码都编写到该类中。
b,为了保证该的独立运行。在类中定义个主函数。格式public static void main(String[] args)
c,保存成一个扩展名为java的文件。
d,在dos控制台中通过javac工具对java文件进行编译。
e,在通过java命令对生成的class文件进行执行。
/*
需求:定义一个hello world小程序。
思路:
1,
2,
步骤:
1,通过class关键字定义一个类。将代码都编写到该类中。
2,为了保证该的独立运行。在类中定义个主函数。格式public static void main(String[] args)
3,保存成一个扩展名为java的文件。
4,在dos控制台中通过javac工具对java文件进行编译。
5,在通过java命令对生成的class文件进行执行。
*/
class Demo//定义一个累。
{
//主函数。
public static void main(String[] args)
{
//输出语句。
System.out.println("hello haha");
}
}
class Demo //这是我的第一个java小程序
{
/*
main函数可以保证该的独立运行。
它是程序的入口。
它会被JVM所调用。
*/
public static void main(String[] args)
{
/*
System.out.println("hello java");//这是输出语句,可以打印小括号中的内容。
System.out.println("hello world");
*/
}
}
注意:
windows操作系统默认是隐藏已知文件扩展名的。
请测试新建一个文本文档,如果看到的文件名是“新建 文本文档”而不是“新建 文本文档.txt”,那么说明你的扩展名被隐藏了。
请选择菜单栏中的 工具 – 文件夹选项 – 查看 – 下拉滚动条找到“隐藏已知文件扩展名” – 取消掉这一项。
2. 编译字节码文件
a. 左键单机屏幕左下角开始 – 运行 – 输入cmd启动命令行窗口
b. 使用DOS命令进入源代码所在目录
c. 使用编译器(javac.exe)编译源代码,javac 文件名.java,编译后在该目录中会出现扩展名为class的字节码文件
3.常用DOS命令:
跳转到指定盘符: 盘符: 例:C: D: E:
跳转到指定目录: cd 目录 例:cd Itcast\day01 cd Tencent\QQ\Bin
显示当前目录下文件: dir
跳转到上级目录: cd..
跳转到根目录: cd\
清屏: cls
运行程序
使用虚拟机(java.exe)运行class文件,java 文件名,注意不要加扩展名,因为虚拟机只能运行class文件,扩展名省略不写,如写则报错。
六. 进制
十进制
由0到9的数字组成,逢十进一
我们最常用的一种进制
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
二进制
由0和1组成,逢二进一
计算机中存储任何数据都是以二进制的形式进行存储的
0 1 10 11 100 101 110 111 1000
八进制
由0到7的数字组成,逢八进一
八进制在程序中以0开头
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
十六进制
由0到9的数字和A-F的字母组成,逢十六进一
十六进制在程序中以0x开头
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
进制转换
a. 十进制转二、八、十六进制
除法取余,将要转换的数除以进制数,记住余数,再除以进制数,记住余数,直到这个数等于0为止,将所有余数反转就是对应的二进制表现形式。
b.二、八、十六进制转十进制
乘法,将要转换的数编号,编号从低位开始,从0开始,将每一位上的数乘以进制数的编号次方,最后将所有乘得的结果相加就是十进制表现形式。
c.二进制和八进制互转
八进制的每一位对应二进制的三位。
a. 二进制和十六进制互转
十六进制的每一位对应二进制的四位。
二进制负数
一个负数的二进制表现形式就是这个负数忽略符号的正数对应的二进制取反再加一。
计算机中存储的二进制数最高位是0则是正数,是1则是负数。
class OperateDemo3
{
public static void main(String[] args)
{
//System.out.println(Integer.toBinaryString(60));
//System.out.println(Integer.toHexString(60));
int num = 26;
//获取60的最低4位,通过&15;
int n1 = num & 15;
System.out.println(n1>9?(char)(n1-10+'A'):n1);
//要获取下一组四位,将60右移4位。
int temp = num >>> 4;
//对temp的值进行最低四位的获取。
int n2 = temp & 15;
System.out.println(n2>9?(char)(n2-10+'A'):n2);
/*
0-9 'A' 'B' 'C' 'D' 'E' 'F'
65 66 67
10 11 12 13 14 15
12 - 10 = 2 + 'A' = (char)67;
*/
int x = 1,y;
y = (x>1)?'a':200;
System.out.println("y="+y);
}
}
七. 码表
ASCII:英文码表,每个字符占1个字节。A是65,a是97
GB2312:兼容ASCII,包含中文,每个英文占1个字节(正数),中文占2个字节(2个负数)。
GBK:兼容GB2312,包含更多中文,每个英文占1个字节(正数),中文占2个字节(第一个负数、第二个可正可负)。
Unicode:国际码表,每个字符占2个字节。Java中存储字符类型就是使用的Unicode编码。
UTF-8:国际码表,英文占1个字节,中文占3个字节。
八. Java语法
1. 基本格式
所有Java代码都应该在一个class中。
Java是严格区分大小写的。
Java是一种自由格式的语言。Java代码分为结构定义语句和功能执行语句,功能执行语句最后必须以分号结束。
2. 注释
单行注释和多行注释是在程序用来标记一些特殊的文本,这些文本不参与编译运行。
单行注释: // 注释内容
多行注释: /* 注释内容 */
文档注释是Java中特有的一种注释,它可以通过JDK中的工具(javadoc.exe)解析,生成帮助文档。
文档注释: /** 注释内容 */
3. 标识符
什么是标识符
标识符可以理解为程序中我们自定义的一些名字,包括:包名、类名、函数名、变量名、常量名。
标识符的命名规则
由大小写字母、数字、下划线(_)和美元符号($)组成,开头不能是数字。不能使用关键字。推荐使用全英文。
标识符通用规范
类名、接口名:
所有单词首字母大写,驼峰式命名,例如:XxxYyyZzz
变量名、函数名:
第一个单词首字母小写,其他单词首字母大写,驼峰式命名,例如:xxxYyyZzz
常量名:
所有字母都大写,单词之间用下划线分割,例如:XXX_YYY_ZZZ
包名:
全部小写,例如:xxx.yyy.zzz
4. 关键字
catch | ||||
short | ||||
throws | ||||
注:java 无sizeof ,goto, const 关键字,但不能用goto const作为变量名
5. 常量
整型
整数,4个字节。
长整型
整数,8个字节。以L结尾。
单精度浮点数
小数,4个字节。以F结尾。
双精度浮点数
小数,8个字节。
布尔
只有两个值,真(true)或假(false),1个字节。
字符
单个字符,2个字节。例如:'a', '中', '5', '\u0026' , '\u0027'
在字符常量中,斜杠(\)是一个特殊的字符,它的作用是用来转义后面一个字符,这些字符通常是不可见的或者有特殊意义的。
'\r' 回车,回到一行的开始
'\n' 换行,换到下一行
'\t' 制表符,键盘上的Tab
'\b' 类似退格,键盘上的Backspace
以上字符都不可见,无法直接表示,所以用斜杠加上另外一个字符来表示。
'\'' 单引号,Java代码中单引号表示字符的开始和结束,如果直接写程序会认为前两个是一对,报错。
'\"' 双引号,Java代码中双引号表示字符串的开始和结尾,如果要写一个包含双引号的字符串那么这个双引号也需要转义。
'\\' 斜杠,Java代码中的斜杠是转义字符,用来和后面一个字符配合使用,在真正需要用斜杠的时候那么就要用另一个斜杠来转义。
以上字符都有特殊意义,无法直接表示,所以用斜杠加上另外一个字符来表示。
字符串
由若干个字符组成的一串。可以是一个字符、多个字符、或者一个都没有。字符串没有固定大小。
空
null,只有这一个值,用来表示一个引用为空。
class OperateDemo
{
public static void main(String[] args)
{
//int x = 4270;
//x = x /1000 * 1000;
//System.out.println(-1%5);
int a = 3,b;
//a++; //--> a = a+ 1;
b = ++a;
System.out.println("a="+a);
//字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
//System.out.println("5+5"+(5+5));//"5+5=55"
/*
转义字符:通过\ 来转变后面字母或者符号的含义。
\n:换行。
\b:退格。相当于backspace。
\r:按下回车键。window系统,回车符是由两个字符来表示\r\n.
\t:制表符。相当于tab键。
*/
System.out.println("hello \t world");
//System.out.println("hello java");
System.out.println("\\hello\\");
char ch = '\'';
char c = 'a';
}
}
6. 变量
int x = 5;
System.out.println(x);
x = 1 + 1;
System.out.println(x);
x = x + 1;
System.out.println(x);
上面的x就是一个变量,变量没有固定的值,是在内存中开辟的一片空间。
Java中的变量中只能存储同一种类型的值。
变量在被取值之前必须初始化(第一次给变量赋值)。
变量分类
a.基本数据类型: 8种
整数:
byte 1个字节,最小值:-128,最大值:127
short 2个字节,最小值:-32768,最大值:32767
int 4个字节,最小值:-2147483648,最大值:2147483647
long 8个字节,最小值:- 9223372036854775808,最大值:9223372036854775807
浮点数:
float 4个字节,最小值:1.4E-45,最大值:3.4028235E38
double 8个字节,最小值:4.9E-324,最大值:1.7976931348623157E308
字符:
char 2个字节,最小值:0,最大值:65535
布尔:
boolean 1个字节,true或false
b.引用数据类型:
类、接口、数组都是引用数据类型,除了8种基本数据类型,其他所有类型都是引用数据类型。
类型转化
a. 自动类型转换
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。
b. 强制类型转换
可以将一个占空间较大的值使用(类型)的形式强制放入一个较小的空间,有可能损失精度。
自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显式类型转换)
类型转换的原理
什么时候要用强制类型转换?
表达式的数据类型自动提升
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
自动类型提升
byte b = 3;
int x = 4;
x = x + b;//b会自动提升为int类型进行运算。
强制类型转换
byte b = 3;
b = b + 4;//报错
b = (byte)b+4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
byte b=6;
b =(byte)(b+2);//因为 b占据一个八位,2是int型 占据四个八位 如果要输出b必须惊醒强制类型转换 转换成 byte 型 再赋值给b
System.out.println(b);//
double d=3.14;
d=(int)(d+5);
System.out.println(d);
float f=3.16f;
f=f+6;//float 和 int 都是四个八位,可是float 后有小数点,所以 在运算时结 果会是 float
System.out.println(f);
System.out.println('a'+1);//输出结果是98 因为字符'a'在ASCLL码表中代表97字符'a' 占两个八位 所以和 1 相加运算时 会提升
System.out.println('a');//输出结果是a 因为字符'a' 作为输出地效果显示
System.out.println((char)('a'+1));//输出结果是 b 字符 中的 大小写 代表的数字也不一样
c. 字符串转换
任何值和字符串相加都会得到字符串。
变量的作用域与生命周期
作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
生命周期:变量的生命周期从定义时开始,超出作用域后结束。变量生命周期以外不能使用。
class VarDemo
{
public static void main(String[] args)
{
/*
//定义变量的格式;
//数据类型 变量名 = 初始化值;
// 定义一个int类型变量.取值为4;
int x = 4;
System.out.println(x);
x = 10;
System.out.println(x);
//演示其他数据类型。
byte b = 2;//-128~127;
//byte b1 = 128;
short s = 30000;
long l = 4l;
float f = 2.3f;
double d = 34.56;
char ch = '4';
char ch1 = 'a';
char ch2 = '+';
char ch3 = ' ';
boolean bo = true;
boolean bo1 = false;
int a = 5;
a = a + 6;
*/
/*
什么时候定义变量?
当数据不确定的时候。需要对数据进行存储时。
就定义一个变量来完成存储动作。
*/
//类型的转换。
//byte b = 3;
//b = b + 2;
//System.out.println(b);
//System.out.println((char)5);
byte b = 3;
b = 3 + 4;
//b = b + 4;
System.out.println(b);
}
}
------------ <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! -----------