疯狂Java学习笔记(002)
回顾
一、常用的dos(disk operation system)命令:
1. dir:directory:列出某个路径下所有的文件和文件夹:
2. cd : change directory:切换目录:不能切换盘符:
3. 如何切换盘符:直接输入盘符:
4. md:mkdir :make directory:创建空目录:可以级联创建空目录
5. rd:rmdir :remove directory:删除空目录:可以删除带内容的目录:/s/q
6.del:delete 删除文件:
二、文件名通配符:
1. .:匹配的是有一个字符:
2. *:匹配的是任意字符.
举例:删除所有的文本文件:
del *.txt
3. exit:退出.
三、Java发展史:
属于高级语言:
sun公司1995推出.
2009年被oracle收购.
oracle:主要做关系型数据库的.MySQL也被oracle收购了.
四、jdk,jre,jvm
1. jdk:Java development kit:Java开发工具包(包含运行和开发的工具)
2. jre:Java runtime environment:Java运行时环境:(Java程序运行的必须环境)
如果只想运行Java程序,只需要jre就可以了.并不需要开发工具.
3. jvm:Java virtual machine:Java 虚拟机:就是一款软件,给Java程序提供一个运行时的环境支撑.它本身也需要一些核心类库(jvm不能单独运行!)
三者之间的关系:
jdk = jre + 开发工具(Tools)
jre = jvm + 核心类库(libraries) libs
4. 安装jdk后找不到java,javac等开发工具?
原因:系统找不到jdk中的bin目录.
解决方案:手动配置path环境变量!(path:系统寻找命令的路径!) ,把:jdk\bin放到path中.
5.了解内容:classpath的含义: jvm虚拟机去寻找类的路径:
1.可以临时指定:(当前会话有效,当前窗口)
set classpath=c:\;d:\;e:\
2.永久修改:
添加一个系统级别的环境变量:classpath
3.在当前命令有效:使用的是-cp选项(参数)
java -cp c:\;e:\ Demo
五、Java语言最大的特点:
跨平台:
原理:在不同的操作系统上提供了jvm虚拟机,Java程序实际上是运行在虚拟机中.并不是直接运行在操作系统之上的.
代码练习:
第一个程序:
Java程序编写的一般步骤:
1.编写源码(以.java结尾的文本文件,一定要把系统的隐藏后缀名取消!)
2.使用javac命令编译,生成一个.class结尾的字节码文件(二进制的)
3.使用java命令启动虚拟机,执行.class字节码文件!
样例:
在屏幕上输出helloworld
public class Hello{ public static void main(String[] args){ System.out.println("helloworld"); } }
注意事项:
1.源码中{},[],()都是成对出现的!
2.语句结束的标识是英文的分号!!
3.执行时,类的路径和类名不能错!java 是大小写敏感的!(严格区分大小写!!!)
六、注释:
在源文件中,给程序加的解释说明性文字!!
注释的作用:
1.给程序解释说明
2.帮助我们做排除法调试!
注意:
多行注释不能嵌套:
练习:
1.在屏幕上输出以下信息:一个信息一行!!!
姓名:你的姓名
年龄:你的年龄
电话:你的电话
地址:北京昌平沙河镇
自己查找资料如何在一个System.out.println语句中实现内容的换行显示!
2.常用的dos命令
3.java语言跨平台的原理是?要求使用语言和图画表示出来!
4.思考题:
*一个Java源文件中是否可以有多个类的定义?
可以:但是public修饰的类只能有一个!
一个源文件中是否可以都是非public修饰的类?
可以.
*一个没有main方法的类是否可以正确编译?是否可以直接运行?
可以正确编译,但是不能直接运行!
能直接运行的类必须包含main方法才行!
小结:
1.凡是public修饰的类,类名必须和源文件名保持一致!!!
即:如果没有public修饰,类名随便定义,可以不和文件名相同!
2.一个源文件中可以有多个类定义!但是public修饰的类只能有一个!
编译后,每个类会自己生成一个.class字节码文件!
3.源文件中可以没有public修饰的类,此时类名和文件名没有约束!!!
4.类中可以没有main方法,可以通过编译,但是不能直接运行!
main方法的含义是:jvm虚拟机要执行程序的入口!
一个程序的入口只能有一个!
六、关键字:keyword
Java中已经定义好的有特殊含义的单词:
特点:全都是小写字母
public
static
void
class
七、标识符:identifier
凡是在程序中起名字的地方的字符串,都是标识符.
类名,方法名,变量名
八、标识符命名规则:(必须遵守的,否则编译报错!)
1.只能包含字符大小写,数字,_,$
2.数字不能开头
3.不能使用关键字,但是可以包含关键字.
九、命名规范:(约定俗成的规定!)
1.包名:多单词组成时所有字母都小写(以后详讲)
xxx.yyy.zzz
2.类名,接口名:多单词组成时,所有单词的首字母大写
XxxYyyZzz
Test
3.变量名,方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写
xxxYyyZzz
main
4.final变量名:所有字母都大写,多单词时单词之间用下划线分隔
XXX_YYY_ZZZ
MAX_VALUE
!!在定义名字的时候,尽量做到见名知意!!!
十、Java中常量(字面量)分类:
1.整型:
2.小数
3.字符:
4.字符串:
5.boolean : 布尔,只有两个值:true,false
6.null
十一、二进制的由来
十二、进制之间的转换:
十进制转其它进制:除以对应的进制数,直到商为0,将余数倒排!
十三、其它进制转十进制:
位权展开法:每位上的数乘以对应的进制数的n次幂(n从右往左开始,从0开始)
十四、8421法则:
1.主要用在二进制和八进制,十六进制的相互转换中!
1111 -> 8421
2.二进制上的一对应十进制的数是固定的.
有1的地方,在最终的结果中加上相应的数字即可.
3.二进制转八进制:从右往左,每三位一组,计算出对应的十进制数,组合在一起就是对应的八进制数.
4.八进制转二进制:每位拆分成三个二进制数.
5.二进制转十六进制:从右往左,每四位一组,计算出对应的十进制数,组合在一起就是对应的十六进制数.
6.十六进制转二进制:每位拆分成四个二进制数.
十五、负数的表示形式:补码!!
1. 原码,反码,补码:都是针对二进制形式说的!!!
2. 正数的原码,反码,补码都是一致的.
3. 先找到对应正数的二进制表示形式,然后区分符号位和数值位:
符号位 数值位
+12 0 000 1100
负数的原码: 1 000 1100
负数的反码: 1 111 0011
负数的补码: 1 111 0100
负数在计算机中是以补码形式存在的:计算的过程如上!!!
-5
符号位 数值位
+5 0 000 0101
-5原码: 1 000 0101
-5反码: 1 111 1010
-5补码: 1 111 1011
总结规律:
+12 0 000 1100
-12的补码: 1 111 0100
+5 0 000 0101
-5补码: 1 111 1011
规律:
1. 求一个负数的补码,先求出对应正数的二进制形式:
2.从右往左找1,遇到第一个1,和它右边的所有的0都保留,从这个1往左,全取反!!!
-20
+20 0001 0100
-20 1110 1100
3. 给出一个二进制数,求它所代表的十进制数:
1011 0011
4.首先判断它的正负:
>如果是正数:位权展开法求
>如果是负数:先求出对应的正数的值,然后取反即可
1011 0011 -77
用规律:
0100 1101 +77
十六、变量
变量的本质:内存中的一段区域!
变量的三要素:
1.类型(变量需要的存储空间的大小)
2.变量名(变量对应空间的标识符,符合命名规范和规则)
3.值(变量对应的内存空间中存储的值)
变量的特点:
在一定范围内变化!即变量可以多次赋值!
十七、变量初始化的两种格式:
1.定义变量时就进行初始化
2.先定义,后初始化!
变量在使用之前一定要初始化!
打印变量,最终打印的是变量代表的值!
样例:
public class VariableDemo{ public static void main(String[] args){ //定义变量: int a = 10; //先定义,后赋值 int b; System.out.println(a);//打印的内容是a所代表的空间内的值!!! // System.out.println(b);//编译器报错!!尚未初始化! b = 20; System.out.println(b); //对变量重新赋值!!! a = 30; System.out.println(a);//打印的内容是a所代表的空间内的值!!! } }
十八、数据类型:
基本数据类型:四类八种!
占用空间:字节数
byte 1
char 2
short 2
int 4
long 8
float 4
double 8
boolean 1
十九、变量的作用域:scope
变量定义时所处的{}就是变量的作用域,出了这个{},变量就找不到了.称为作用域,也叫代码块。
二十、变量赋值的方式:
1.使用字面量赋值,int a = 10;
2.使用变量给变量赋值(要么是相同的类型;要么是可以隐式转换的),inb b = a
3.使用表达式赋值;int a = 10+1;
4.使用变量参与的表达式赋值;int a = 1+ b;
*在撰写代码时,一行只定义一个变量。为了观感好。当然也没有语法错误,int a ,b,c;
系统自动的进行了类型转换,如:
1.只有类型相同的数据才能进行运算
2.如果类型不同,①系统会自动进行类型转换,也叫隐式类型转换、自动类型转换(从小范围到大范围)
②显示类型转换,强制类型转换;(从大范围到小范围),目标类型 目标变量 =(目标类型)被转换的值。如,int i =10;byte s = (byte)i;
特点一:发生了高位截断,留的是低位。
特点二:浮点型到整形的转换,先取整,然后再高位截断。如doubled=3.14;int i = (int)d; 打出的 127是最大正数,128是负数。
3.表达式中类型转换的转换原则是:招标准
1.byte,short,char参与运算,直接转换成int型,
2,char型参与运算实际上用的是对应的Unicode编码值(借鉴ascii码表,其实Unicode的子集,美国标准信息交换代码):
记住几个关键,,字符‘0’对应的数字是48,‘ A’对应的数字是65,‘a’对应的数字是97
char型变量参与运算,实际上使用的是对应的int型值;char ch = 65;打印出来的是A。
3.表达式中有更大的表数范围,则继续提升
如:byte b = 10;int i = 20;double d= 30;res = b + i +d;
4.boolean类型不参与数值运算,也不能和其他类型进行转换。
5.byte型可以转换成short型,但是char不行。
自动类型转换:不是比较的存储空间的大小,而是表数范围的大小!
1.赋值语句右边如果是常量组成的表达式,在编译截断
一道面试题:byte b = 130;以上语句是否正确,如果想让赋值语句变得正确,如何更改,赋值之后的结果又是多少呢?
首先更改的话是byte = (byte)130;只是强制类型转换,因为byte的范围是127到-128,而赋值之后,byte是一个字节,也就是8位二进制数,且127的二进制数是01111111,如果加1就是11111111,这个是-128,而127加3即为130,所以对01111111加3即为10000010,发生高位截断,首先后面的10保留,然后由于前面的是负数1开头,所以对其他的二进制位取反,则有01111110,因为01111111是127,所以比它小1的数是126,因为开头二进制数字是1,所以是-126。