黑马程序员——Java语言基础 笔记第一篇
来源:互联网 发布:兽娘动物园 知乎 编辑:程序博客网 时间:2024/06/05 15:28
java 语言基础—Java概述、环境的搭建、变量的数据类型、位运算符、流程控制语句
-----Java培训、Android培训、期待与您交流! -------
1 Java概述
1.1. 常见的dos命令
盘符: 进入指定的盘符下。
dir : 列出当前目录下的文件以及文件夹
md : 创建目录
rd : 删除目录 注意:rd不能删除非空的文件夹,而且只能用于删除文件夹。
cd : 进入指定目录
cd.. : 退回到上一级目录
cd \ : 退回到根目录
echo "hello java">a.txt 写入文本到指定文件
type a.txt 显示文件内容命令
del : 删除文件 注意:不能删除文件夹,只能删除文件。
exit : 退出dos命令行
cls : 通知计算机将当前的命令清空
*: 是通配符。
tab 命令补全。
方向键上下是找回上次你写过的命令。
注:在dos命令行里用rd删除文件夹时,必须保证文件夹里面没有文件,此时可以单个的删除里边的文件,也可以使用del+文件夹的方式删除里边的所有文件。
技巧:当我们要进入一个目录,而目录名很长,如:目录名为woshiheimachengxuyuan,我们可以用 cd woshi*,用*代替后面文字的方式来简写,效率快。
1.2. 注释
注释的作用:1、注解、说明、解释我们的程序,提高代码的阅读性。;2、调试程序。例如程序出现错误,可以例如注释来查找出错的地方。
有三种注释方式:单行注释、多行注释、文档注释。
单行注释://注释文字
多行注释:/*-------中间可以有多行注释文字-------*/ 注:多行注释不要嵌套多行注释。
文档注释:是Java特有的注释,通常书写在类、域、构造函数、方法、定义之前。注释内容可以被JDK中的工具javadoc.exe所解析,生成一套以网页文件形式体现的该程序分说明文档。格式:例
/**
作者:
版本:
作用:
等
*/
文档注释 (编写软件说明书)
1. 需要使用sum给我们提供的javadoc工具生成一个html的说明文档。
2. 只能抽取public的属性或者方法内容。
格式:
Javadoc –d 指定存储文档的路径 -version –author(可选) 目标文件
@author 作者
@version 版本
@param 方法的参数
@return 返回值
初学者应该养成先写注释再写代码的习惯,因为代码仅仅是思想的一种体现形式而已。将自己的思想通过注释先整理出来,再用代码去体现,不要每行都加注释,也不要每行都不加注释。
1.3. Java虚拟机(JVM)
Java Virtual Machine 一个软件模拟的计算机。Java源程序想象成我们的C源程序,Java源程序编译后生成的字节码(.class)就相当于C源程序编译后的二进制可执行文件。JVM虚拟机相当于计算机系统(操作系统+硬件环境),Java解释器相当于CPU。
.exe文件直接在windows操作系统下运行,在CPU上运行的是机器码(.exe文件)
.class字节码文件是运行在JVM虚拟机下的,在Java解释器上运行的是Java字节码。
Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一 个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台 下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。
2 环境的搭建
2.1 JDK目录介绍
1. bin目录:存放Java的编译器、解释器等工具(可执行文件)。
2. db目录:JDK7附带的一个轻量级的数据库,名字叫做Derby。
3. include目录:存放的调用系统资源的接口文件。
4. jre目录:存放Java运行环境文件。
5. lib目录:存放Java的类库文件。
6. src.zip文件:JDK提供的类的源代码。
2.2 配置path环境变量
1、JAVA_HOME环境的配置
有时候可能需要更换Jdk的目录,但是经常修改path的值可能会不小心修改其他的路径,解决方法:
1、 创建一个JAVA_HOME的变量。
2、 JAVA_HOME的值为JDK的安装目录。
3、 配置path路径:%JAVA_HOME%/bin。
以后需要更换JDK的目录时,只需要更换JAVA_HOME的目录即可。
设置临时变量:
set: 查看所有的环境变量信息。
set 变量名 :查看具体一个环境变量的值。
set 变量名=:清空一个环境变量的值。
set 变量名=具体值 :给指定变量定义具体值。
想要在原有环境变量值基础上添加新值呢?
首先,通过%变量名%操作符获取到原有环境变量的值。
然后加上新值后在定义给该变量名即可
举例:给path环境变量加入新值
set path=新值;%path%
注意:这种配置方式只在当前dos窗口有效。窗口关闭,配置消失。
2.3 classpath环境变量
1. classpath的作用: 作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,一旦配置了classpath路径信息的时候,jvm与java编译器都会根据classpath指定的路径去寻找class文件。
2. 如何设置当前目录(.)
set classpath=.;设置路径 与 set classpath=设置路径;.有什么区别?
“.”在前面的时候,java虚拟机会先从当前路径去寻找class文件,然后再到指定的路径去需找。如果”.”在后面,java虚拟机则会先寻找指定好的路径,然后再在当前的路径去寻找。
设置classpath的时候要加上 ; 就会在当前目录下查找。
2.4 疑问总结
1. JRE、JDK是什么
JRE java运行环境 JRE = JAVA虚拟机+ 核心类库。
JDK java开发工具集。 jdk = jre + java开发工具
2. 配置path、JAVA_HOME、classpath的作用。
path: 为了让控制台在任意路径下都可以找到java的开发工具。
java_home:为了避免频繁修改path路径信息。 java_home保存的是jdk安装路径。
classpath: 设置class文件所在的路径。
3. 配置classpath的时候加上分号与不加分号的区别?
classpath如果添加分号,那么就先到classpath所配置的路径信息下去搜索class文件,如果找不到
还会去到当前路径下去搜索。
不添加 分号: 仅对去classpath配置路径信息下去搜索。
3 变量的数据类型
1. 整型
byte 代表一个字节的大小 8bit 2(8) -128~127 256
short 代表两个字节的大小 16bit 2(16) -2(15)~2(15)-1
int 代表四个字节的大小 32bit 2(32) -2(31)~2(31)-1
long 代表八个字节的大小 64bit 2(64) -2(63)~2(63)-1
如果一个数值没有采取特殊的处理,那么该整数默认的类型是int。
可以使用数值后面添加L或小写L改变默认的整数类型。
2. 浮点型
float 代表四个字节的大小 32bit
double 代表八个字节的大小 64bit
java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。
3. 字符型
char 代表两个字节的大小 16bit 2(16)
原理:将字符映射为码表中对应的十进制数据加以存储。
4. 布尔型
boolean 占一个字节。只有true与false两个值。
3.1表达式的数据类型自动提升
算术表达式,逻辑表达式
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
分析 System.out.println(‘a’+1)结果?
自动类型提升
byte b = 3;
int x = 4;
x = x + b;// b会自动提升为int类型参与运算。
System.out.println(x);// 7
强制类型转换
byte b = 2;
/*
* 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b
*/
b = (byte) (b + 2);
System.out.println(b);// 4
思考1
byte b=126;
问:既然数据默认的有数据类型,那么126 默认是int类型的,为什么存储到byte类型时不会报错呢。
126 是常量java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。
思考2:byte b=128;能否正常的编译和运行。
该语句会出现编译错误,128超出了byte变量的存储范围,所以出现编译错误。
思考2
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪一句编译失败?为什么?
b =3+4, 3和4都是常量,所以java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。例如b=128+1 就无法编译通过。b=127+1;也是无法通过。
b =b1+b2 不可以,因为b1 和b2 是变量,表达式求值时,变量值会自动提升为int型,表达式结果也就成了int型,这是要赋值给byte型的b,必须进行强制类型转换了。
思考 3
short s1 = 1;
s1= s1+1;
s1+=1;
问:s1= s1+1; s1+=1; 与有什么不同?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
数据类型转换要注意的细节:
1.凡是byte 、char 、short数据类型数据在运算 的时候都会自动转换成int类型数据再运算的。
2.两个不同类型的数据在运算 的时候,结果取决于大的数据类型数据。
在做取模运算的时候结果的正负是取决于被除数。
System.out.println("10%3 = "+(10%3)); // 1
System.out.println("-10%3 = "+(-10%3)); // -1
System.out.println("10%-3 = "+(10%-3)); // 1
System.out.println("-10%-3 = "+(-10%-3)); // -1
i++ 后自增的运行原理:
后自增实际上是是要使用到操作数没有加1之前的值的。
i = i++;
先运算i++:
int temp = i;
i = i+1;
return temp;
i存储的值的变化过程:
0---->1--->0
比较运算符
==
作用:
1. ==号用于基本类型数据的时候,判断的是两个基本类型变量的值是否相等。
2. ==号用于引用类型数据的时候,判断的是两个引用类型变量是否指向同一个对象。
4 位运算符
规则:
可以把1当做true 0当做false
只有参与运算的两位都为1,&运算的结果才为1,否则就为0。
只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。
只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。
~ 反码
就是取反,二进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。
0000-0000
0000-0000
0000-0000
0000-0110
6
1111-1111
1111-1111
1111-1111
1111-1001
取反 -7
System.out.println(~6);//-7
结论:当参与取反的数值是正数时,把对应的值加上负号,再-1;
当参与取反的数值是负数时,把对应的值加上负号,再-1;
负数的表现形式就是对应的正数取反,再加1。负数的最高位肯定是1。
负数表示
负数对应的正数的二进制-1,然后取反。
-6
0000-0000
0000-0000
0000-0000
0000-0110
6
1111-1111
1111-1111
1111-1111
1111-1001
取反
1111-1111
1111-1111
1111-1111
1111-1010
加1
异或特点
一个数异或同一个数两次,结果还是那个数. 用处一个简单的加密思想.
6^3^3
0000-0000
0000-0000
0000-0000
0000-0110
6
0000-0000
0000-0000
0000-0000
0000-0011
^3
0000-0000
0000-0000
0000-0000
0000-0101
0000-0000
0000-0000
0000-0000
0000-0011
^3
0000-0000
0000-0000
0000-0000
0000-0110
结果是6
5.流程控制语句
1、顺序语句
2、判断(if…else)
1.格式一
if(判断条件){
如果符合条件执行的代码;
执行的代码块1;
执行的代码块2;
……………….;
执行的代码块n;
}
2.格式二
if(判断条件){
执行的代码块1;
执行的代码块2;
……………….;
执行的代码块n;
}else{
执行的代码块1;
执行的代码块2;
……………….;
执行的代码块n;
}
if else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2;
三元运算符:
好处:可以简化if else代码。
弊端:因为是一个运算符,所以运算完必须要有一个结果。
3. 格式三
if(判断条件1){
执行的代码块1;
}else if(判断条件2){
执行语句;
}else if(判断条件3){
执行语句;
}
3、选择判断语句(switch)
switch语句特点:
1,switch语句选择的类型只有四种:byte,short,int, char。
2,case之间与default没有顺序。先判断所有的case,没有匹配的case执行
default。
3,switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。
4,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运
行可以执行的语句,直到遇到break或者switch结尾结束。
5,switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。
if 和switch 语句很像,具体什么场景下,应用哪个语句呢?
如果判断的具体数值不多,而是符号byte,short int char 四种类型.
虽然2个语句都可以使用,建议使用switch语句.因为效率稍高.
其他情况:
对区间判断,对结果为boolean 类型判断,使用if if的使用范围更广。
if 除了能判断具体数值还能判断区间。switch 判断区间会很费劲的。要写好多case 对于运算结果是boolean型的 if 能判断 switch 是不能实现的。例如:根据学生考试成绩划分ABCD A90-100 B80-89 C70-79 D60-69 E0-59。
实际开发怎么选择呢?
如果要对具体数值进行判断,并且数值不多,那么 就用switch 来完成。switch的case条件都是编译期整数常量,编译器可以做到表格跳转查询,查找速度快。
但是switch 的局限性比较大必须是4种类型,并且值不多。一般都是使用if。 最后在jdk 7中对switch进行了增强还可以判断字符串。5.0 增加了对枚举的判断。
备注:JDK7.0开始可以使用switch可以使用字符串类型的数据了.
4、While循环
Java提供了三种类型的循环语句:while循环,do-while循环和for循环。
do while语句格式:
1、while语句格式:
while(条件表达式)
{
执行语句;
}
5、do while 语句
do
{
执行语句;
}while(条件表达式);
do while特点是条件无论是否满足,
循环体至少被执行一次。
6、for 循环
1.格式:for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
总结:
1、for里面的两个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
2、while与for可以互换,区别在于for为了循环而定义的变量在for循环结束时就在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
3、最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。推荐使用while(true)
经典的例子
forfor 嵌套for循环练习2
打印此种格式的图案
*****
****
***
**
*
public static void main(String[] args) {
for (intx = 5;x > 0;x--) {//行数
for(int y=x;y>0;y--){//列数
System.out.print("*");
}
System.out.println("");
}
}
练习:
*
**
***
****
*****
public static void main(String[] args) {
for (intx = 0;x < 5;x++) {//行数
for (int y = 0; y <=x; y++) {//列数
System.out.print("*");
}
System.out.println("");
}
}
练习:99乘法表
public class Test {
public static void main(String[] args) {
for(inti = 1 ;i<=9 ;i++){ //行数
for(intj = 1;j<=i ;j++){ //列数
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();//换行
}
}
}
7、break、continue关键字
break关键字:break语句用于终止最近的封闭循环或它所在的 switch语句。控制传递给终止语句后面的语句(如果有的话)。
适用:for循环 、 switch两种循环语句。
break的用法:
1. 单独使用。
2. 与标签一起使用。(标签:即一个名字,满足标识符的条件即可)。
使用细节: 不要再break语句之后,编写其他语句,永远都执行不到,编译报错。
continue关键字:语句将控制权传递给它所在的封闭迭代语句的下一次迭代。(跳出本循环,执行下一次循环)。
适用于:while 、 do while 、 for循环语句
使用细节:
1. 如果continue出现在循环的末尾(最后一条语句),那么可以省略。
2. 如果continue出现在循环的第一条语句,那么后面的语句都无法执行,所以编译报错。
3. 如果需要让continue作用于其他的循环语句呢?
解决方案: 配合标签的使用。
- 黑马程序员——Java语言基础 笔记第一篇
- 黑马程序员——Java基础——第一篇
- 黑马程序员-----c语言基础与重点第一篇——C知识基础
- 黑马程序员——iOS基础第一篇
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员—Java语言基础1
- 黑马程序员—Java语言基础2
- 黑马程序员—Java语言基础1
- 黑马程序员—Java语言基础2
- 黑马程序员—Java语言基础
- 黑马程序员—Java语言基础(数组)
- 黑马程序员—java基础语言简介
- 黑马程序员—【Java语言基础】
- 使用StretchBlt函数进行图像缩放
- Spring3.0的AOP基于Annotation AOP基于XML
- Cocos2d-x之2048
- [缘娜衣]2014冬季新款韩版军工装 短款羽绒服 羽绒棉服 棉衣短款
- POJ 2828 Buy Ticketshttp://poj.org/problem?id=2828
- 黑马程序员——Java语言基础 笔记第一篇
- 更改根目录权限问题解决 chmod 777 -R /
- 技术男与你探讨单片机编程与思想
- web响应式网站设计
- android:installLocation简析
- vector的初始化,访问,插入,删除
- SqlServer查询语句内部详细处理流程(图)
- 细说电容的几种用法
- C编程:求最大公约数,最小公倍数。