疯狂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。

 

 

 

 

 

 

 

  

posted @ 2018-10-29 09:41  杜菲  阅读(114)  评论(0编辑  收藏  举报