01、Java基础知识

 

1:基础知识

  (1)计算机

  (2)计算机硬件

  (3)计算机软件

  (4)软件开发

  (5)人机交互

    A:图形化界面方式

    B:命令行方式

      (6)DOS命令

    注意:打开DOS窗口的方式:

      *开始--程序--附件--命令提示符

      *开始--运行--cmd--回车

      *Win+R--cmd--回车

    A:dir  列出当前目录下的文件以及文件夹

    B:md   创建目录

    C:rd   删除目录

    D:cd.. 退回到上一级目录

    E:cd  退回到根目录

    F:del del a.txt/*.txt 删除文件

    G:exit 退出DOS命令行

    H:清屏 cls

    I:盘符切换 d:

  (7)键盘的认识和快捷键

    A:键盘的认识 tab,shift,windows,空格键,ctrl,alt,enter,上下左右键

    B:常用文本操作的快捷键

    A:全选 Ctrl+A

    B:复制 Ctrl+C

    C:粘贴 Ctrl+V

    D:剪切 Ctrl+X

    E:保存 Ctrl+S

    F:撤销 Ctrl+Z

 

2:java语言的概述

  (1)计算机语言

  (2)Java语言的体系结构 JavaSE,JavaEE,JavaME Android

  (3)JDK和JRE以及JVM

    A:JVM java虚拟机,用于保证java语言的跨平台特性。(例子:小霸王游戏机模拟器)

    B:JRE java语言的运行环境,包括JVM + class library(虚拟机+类库)

    C:JDK java语言的开发环境,包括JRE + tools(jre+工具集)

    总结:java程序通过jdk来开发,通过jre来运行。

  (4)JDK获取

    A:官网 www.oracle.com/java.sun.com

    B:百度,谷歌搜索 一般我建议概念性内容用百度。技术性内容用谷歌。

  (5)JDK的安装

       注意:一路下一步即可搞定。但是安装的路径名不要含有特殊字符,空格和中文。

 

3:JDK环境变量的配置

  (1)环境变量 执行环境,指向灯。 path windows会自动到这个路径中去找你输入的命令存不存在。

  (2)配置方式

    A:临时环境变量的配置 了解 set path=D:developJavajdk1.6.0_30in;%path%;

    B:永久性配置 

      *找到 我的电脑--属性--高级--环境变量--系统变量

      *新建 JAVA_HOME  D:developJavajdk1.6.0_30

      *编辑 path  %JAVA_HOME%in;其后跟的是以前的环境变量信息;

 

4:体验程序Hello World

  (1)开发工具 记事本,EditPlus;Eclipse,MyEclipse(集成开发环境)

  (2)开发步骤:编写源文件--编译源文件--执行字节码

    A:打开记事本,在里面输入以下内容

class Demo{

    public static void main(String[] args){

        System.out.println("Hello World");

    }

}    

 

    B:class 是java的关键字,而且java开发的基本组成部分就是class

    C:Demo是类名,可以任意起。

    D:public static void main(String[] args) 

      *要想类能够独立运行,就必须有主函数。

      *没有主方法可能出错 Exception in thread "main" java.lang.NoSuchMethodError: main

        E:System.out.println("Hello World");

        *把()里的内容在控制台进行输出。

    F:通过javac命令对.java的源文件进行编译,生成字节码文件。

    G:通过java命令执行字节码文件。

 

5:运行时常见的问题

  (1)找不到文件的错误 文件名或者路径有问题。特殊情况:扩展名被隐藏。

     *更改扩展名被隐藏的问题 工具--文件夹选项--查看--把隐藏已知文件扩展名前面的对勾去掉。

  (2)System写成了system java语言严格区分大小写。执行类的时候,类名也是严格执行大小写的。   

  (3)需要";" java语句是以分号结束。        

  (4)非法字符: 65307 标点符号的中英文出错。         

  (5)Exception in thread "main" java.lang.NoSuchMethodError: main 程序没有main函数,或者main函数的名字写错了。        

  (6)Exception in thread "main" java.lang.NoClassDefFoundError: Demo 名字写错了,或者不在当前路径下。

         

6:path

  path配置:

    *临时配置方式:通过dos命令中的set命令完成。该方式只在当前dos窗口有效,窗口关闭,配置消失。

      **set:用于查看本机的所有环境变量的信息

      **set 变量名:查看具体一个环境变量的值

      **set 变量名=:清空一个环境变量的值

      **set 变量名=具体值:给指定变量定义具体值。

    *想要在原有环境变量值基础上添加新值呢?

      **首先,通过%变量名%操作符获取到原有环境变量的值

      **然后加上新值后再定义给该变量名即可

      **举例:给path环境变量加入新值

          ***set path = 新值;%path% 

 

7:classpath

  JVM查找类文件的顺序:

    *如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件

    *如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件。

        **值的结尾处如果加上分号,那么JVM在classpath目录下没有找到要指定的类文件,会在当前目录下再查找一次;

        **值的结尾处如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目录下有,也不会运行;

    *建议:配置classpath环境变量时,值的结尾处不要加分号,因为已经指定路径去查找类文件,没有找到应该告诉用户,而不是查找当前目录,返回一个让用户意外的结果。如果需要访问当前目录可以用“.”表示

 

  (1)classpath变量值是java类文件的目录;path变量是windows程序文件的目录

  (2)如果配置了classpath,我们就执行classpath指定目录下的东西。

  (3)如果没有配置classpath,我们就在当前目录下执行程序。如果找不到程序,报错。

  (4)如果配置了classpath并且末尾处加了";"号,这个时候,classpath目录下没有的东西,会继续在当前目录下找,如果还没

     找到则报错。建议,不要添加";"号。

 

8:关键字

  (1)被java语言赋予了特殊含义的单词。

  (2)关键字的特点:全部是小写字母。

  (3)goto和const虽然从未被使用,但是被用作java的关键字保留。

 

9:标识符

  (1)就是起名字。Java 语言中,对各种变量、方法和类等要素命名时使用的字符序列称为标识符。

  (2)Java 标识符有如下命名规则:

    A:标识符由字母、下划线“_” 、美元符“$”或数字组成。

    B:标识符应以字母、下划线 、美元符开头。即不能以数字开头。

  (3)Java中标识符的规范:见名知意,驼峰命名。

    A:包   包名全部小写。

      *例如 xxx.yyy.zzz 

      *www.baidu.com/www.itcast.cn  开发中,他们的包名 com.baidu.www/cn.itcast.www

    B:类和接口

      *如果是单个单词,首字母大写。例如:Student

      *如果是多个单词组成,每个单词的首字母大写。例如:HelloWorld

    C:变量和函数

      *如果是单个单词,小写即可。例如:main

      *如果是多个单词组成,首字母小写,从第二个单词开始,每个单词的首字母大写。

        例如:makeMoney

      *变量是名词组成。 函数是由动词+名词组成。

    D:常量 

      *如果是单个单词,全部大写即可。例如:MONEY

      *如果是多个单词组成,每个单词大写,用_连接。例如:MAKE_MONEY

 

10:注释

  (1)概念:注释说明文字,给人看的。

  (2)注释的分类

    A:单行注释

      //

    B:多行注释

      /*

      */

    C:文档注释

      /**

      */

  (3)注释的用途

      A:提高代码的阅读性,它是给人看的。

      B:注释错误,调试代码。 

  (4)注释的应用 规范。

  (5)问题:

    单行注释可以嵌套单行注释吗? 可以

    单行注释可以嵌套多行注释吗? 可以

    多行注释可以嵌套单行注释吗? 可以

    多行注释可以嵌套多行注释吗? 不可以

 

11:常量

  (1)在程序的运行过程中,其值不能改变的量。

  (2)在java中,常量的分类:

    A:整数

    B:小数(实数)

    C:布尔

    D:字符

    E:字符串

    F:null

 

12:进制

  (1)就是计数的方式。就是进位制,是人们规定的一种进位方法。 

        对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位。

  (2)二进制的特点。有电信号演变而来,并且计算机中所有的数据都是以二进制表示。

  (3)四种进制:

    A:二进制 0,1 

    B:八进制 0-7 用0开头;例如:056

    C:十进制 0-9

    D:十六进制 0-9,A-F();用0x或者0X开头;例如:0xF4

      *A   B   C   D   E   F

      *10  11  12  13  14  15

  (4)进制转换:

    A:二进制-->十进制 例如:1101--13  利用8421码快速计算

    B:八进制-->十进制 例如:056--46

    C:十六进制-->十进制 例如:0xF4--244

        系数:所在权位的数值 

      基数:X进制,则其基数就为X

      权:

      总结:用系数*基数的权次幂相加之和,就是该数据在十进制中的数据值。

      D:十进制--二进制

        *除以2取余,直到商为0,最后余数反转。

        *例如:13--1101

    E:十进制--八进制

        *第一种:除以8取余,直到商为0,最后余数反转。

      *第二种:十进制--二进制--八进制 

      *例如:13--1101--015

    F:十进制--十六进制

      *第一种:除以16取余,直到商为0,最后余数反转。

      *第二种:十进制--二进制--十六进制 

      *例如:13--D

  (5)有符号数的表示方式:原码,反码,补码:

    A:原码 最高位是符号位,1表示负数,0表示正数

      *+7原码:0  0000111

      *-7原码: 1  0000111

    B:反码 正数的反码和原码相同;负数的反码是原码的符号位不变,数据位取反,就是1变0,0变1

      *+7反码:0  0000111

      *-7反码: 1  1111000

    C:补码 正数的补码和原码相同;负数的补码是反码+1;

      *+7补码:0  0000111

      *-7补码: 1  1111001

 

13:变量

  (1)在程序的运行过程中,其值可以改变的量。变量其实就是内存中的一小块区域。用于存储数据。

  (2)格式:数据类型 变量名 = 初始化值;

  (3)什么时候使用变量?当数据不确定的时候,就定义变量来存储数据。

  (4)数据类型

    A:基本数据类型 基本数据类型不同在于在内存中所占用的空间不同。(4类8种)

      *整数

        **字节 byte 占用1个字节

        **短整型 short 占用2个字节

        **整型 int 占用4个字节

        **长整型 long 占用8个字节 赋值的时候末尾加l或者L

      *实数

        **单精度类型 float 占用4个字节,赋值的时候末尾加f或者F

        **双精度类型 double 占用8个字节

      *字符

           **字符型 char 占用2个字节

      *布尔 

          **布尔型 boolean 占用一个字节

      注意:整型默认是int,实数默认是dobule。

    B:引用数据类型(类,接口,数组)

    C:类型转换

      *boolean 类型不可以转换为其他的数据类型。

      *整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:

        **容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为:

            ***byte,short,char->int->long->float->double

            ***long占8字节,而float只有4字节,long可以自动提升为float,因为float会采用科学计数法来存储数据,float的容量是比long大的        

            ***byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型

        **容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。

        **有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

  注意:

    a、同一作用域下不可以声明同一个名称的变量。

    b、参与运算的两个数要求类型一致;

      c、int y = 10;

        byte b = 5;//自动检查5是否在byte所能够表示的范围内,如果在,就直接赋给。否则,报错。

        y = y + b;//byte类型在参与运算时,自动转成int类型。

    d、强制转换符(),里面放的是你要转换为的数据类型。 (数据类型)

        b = (byte)(b + y);//y为int类型

    e、byte b1 = 3,b2 = 4,b3;

        b3 =b1 + b2;//会报错,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。

        b3 =3 + 4;//不会报错,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围,如果没有超出范围则可以赋值。

    f、字符型数据参与计算,首先它去查该字符对应的ASCII表中的值是多少?然后参与运算。

    g、布尔型类型不能转换为其他类型,所以其不能参与运算

    h、字符串参与运算 +在字符串参与运算中,称为字符串连接符。它是做字符串连接,最后结果是字符串。

 

    转义字符:通过来转变后面字母或者符合的含义;

         :换行

        :退格

         :按下回车键;window系统,回车符是由两个字符来表示

         :制表符,相当于tab键

 

14:运算符

  (1)算术运算符 +,-,*,/,%,++,--

    A:%

      *当左边大于右边,取余数。

      *当左边等于右边,值为0。

      *当左边小于右边,值为左边。

      *余数的正负号取决被除数的正负。

      *用途:任何数%2,值要么是1,要么是0。用于切换判断。

    B:++,--

      *作为语句单独使用,就是本身加或者减1。先加后加都一样。

      *参与运算时,放在操作数前,先自增,然后再运算。放在操作数后面,先运算,再自增。

    C:+ 

      *正负号

      *加号

      *字符串连接符

  (2)赋值运算符 =,+=,-=,*=,/=,%=

    A:= 把赋值号右边的内容赋给左边的变量。

    B:int x = 3; 

         x = x + 3

         x+=3; //把左右的和赋给左边。赋值运算符有一个自动转换的过程。

  (3)比较运算符 ==,!=,>,>=,<,<=

       A:运算结果是boolean类型。

  (4)逻辑运算符 &,|,!,^,&&,||

    A:& 与运算符:当左右都是true的时候,结果才是true。    

          左边        右边        结果

      true        true        true

      false       true        false

      true        false       false

      false       false       false

     B:| 或运算符:当左右都是false的时候,结果才是false。

      左边        右边        结果

      true        true        true

      false       true        true

      true        false       true

      false       false       false

    C:^ 异或运算符:当左右相同的时候结果为false;当左右不相同的时候结果为true;

      左边        右边        结果

      true        true        false

      false       true        true

      true        false       true

      false       false       false

    D:!true 则 false

         !false 则 true

         !!true 结果 true

    E:&&:短路与

      区别:

        &:无论左边是true还是false,右边都要运算。

        &&:当左边为false,右边就不运算了。

    F:||:短路或

      区别:

        |:无论左边是true还是false,右边都要运算。

        ||:当左边为true,右边就不运算了。

  (5)位运算符 &,|,^,~,<<,>>,>>>

    A:&:当对应位上都是1的时候,结果才为1。

    B:|:当对应位上都是0的时候,结果才为0。

    C:^:对应位上相同为0,不同为1。 

        *规律:任何数对同一个数异或两次,结果为本身。

        *应用:加密。

    D:~:按位取反,1变0,0变1。

    E:<<:就是将左边的操作数在内存中的二进制数据左移右边操作数指定的位数,右边被移空的部分补0。相当于乘以2的次幂

    F:>>:右移稍微复杂一点,如果最高位是0,左边被移空的位就填入0;如果最高位是1,左边被移空的位就填入1。相当于除以2的次幂

        **应用局限性 要乘以或者除以的数必须是2的次幂。

    G:>>>:无论最高位是1还是0,左边被移空的高位都填入0。

  (6)条件运算符 

    A:(条件表达式)?表达式1:表达式2; 举例:x = (100==100)?100:200;

    B:计算完后必须有结果。

  练习:

      1.最有效率的方式算出2乘以8等于几?

          2<<3

      2.对两个整数变量的值进行互换(不需要第三方变量)

          a=a^b;

      b=a^b;

      a=a^b;

 

15:语句

  (1)判断结构

   If语句:(三种方式)

    方式一:

      If(判断条件){

        执行语句;

       }

    方式二:

      If(判断条件){

          执行语句; 

      }else{

        执行语句;

      }

    方式三:

      if(判断语句){

        执行语句;

      }else if{

        执行语句;

      }else{

        执行语句;

      }

      最后的else可以省略不写。但是不建议:

        A:它是if的组成部分,不写有可能规则出问题。

        B:你不能保证你把所有的情况都能考虑清楚了。所有给一个条件都不满足时的提示。

  If语句的特点:
         a,每一种格式都是单条语句。

       b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。

       c,条件表达式无论写成什么样子,只看最终的结构是否是true 或者 false;

  (2)选择结构

    switch语句

      格式:

        switch(表达式){

        case 取值1:

            执行语句;

            break;

        case 取值2:

            执行语句;

            break;

          …

        default:

            执行语句;

            break;

        }

 

    总结:

      1:switch语句中break可以省略。用途在于多个答案采用统一处理方式。

      2:switch语句的应用场合:对几个值进行判断。小范围还可以。大范围立马挂掉。

 

    switch语句特点:

       a,switch语句选择的类型只有四种:byte,short,int ,char。(jdk1.5以后已增加其他类型,未查)

       b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。

       c,结束switch语句的两种情况:遇到break,执行到switch语句结束。

       d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。

 

  (3)循环结构

    代表语句:while , do while , for

      while语句格式:

        while(条件表达式){

            执行语句;

        }

    先判断逻辑表达式的值。若=true.则执行其后面的语句,然后再次判断条件并反复执行,直到条件不成立为止。

 

      do while语句格式:

      do{

          执行语句;

      }while(条件表达式);

       先执行语句,再判断逻辑表达式的值,若为true,再执行语句,否则结束循环。

 

     For语句:

      格式:

        for(初始化表达式;循环条件表达式;循环后的操作表达式){

              执行语句;

        }  

   

    注意:

      a,for里面的表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复之前过程,直到条件不满足为止。

      b,while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。

      c,最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。

 

 

    循环结构练习:

      a、求1-10之和

     int sum = 0;

   for(int x=1; x<=10; x++){

      //sum = sum + x;

      sum+=x;

  }

 

  

    b、打印出1-100之间能够被6整除的数。

for(int x=1; x<=100; x++){

    if(x%6==0){

        System.out.println(x);

    }
 }

 

 

  c、统计1-100之间能够被6整除的数有多少个

int count = 0;

for(int x=1; x<=100; x++){

    if(x%6==0){

        count++;

    }
}

 

 

  d、打印图形:

            对于打印长方形:外循环控制行数,内循环控制的是每一行的列数。也就是一行中的元素个数

            大圈套小圈思想

    打印出如下图形:

      *****

      ****

      ***

      **

      *

    通过分析可知,用for循环嵌套可以做。行是5,列是变化的。

for(int x=0; x<5; x++){

    for(int y=x; y<5; y++){

        System.out.print("*");

    }

    System.out.println();

 }

 

 

    打印出如下图形

      *

      **

      ***

      ****

      *****

    通过分析可知,用for循环嵌套可以做。行是5,列是变化的。

for(int x=0; x<5; x++){

    for(int y=0; y<=x; y++){

        System.out.print("*");

    }

    System.out.println();

}    

  

  总结:尖朝上的三角形,内循环的循环条件表达式变化,

       尖朝下的三角形,内循环的初始化表达式变化,

    打印出如下图形:

      * * * * *

       * * * *

        * * *

         * * 

          *

for (int x = 0;x <5 ;x++ ){

    for (int y=0;y<x ;y++ ){

        System.out.print(" ");

    }

    for (int z=0;z<5-x ;z++ ){

        System.out.print("* ");

    }

    System.out.println();

}    

 

 

    break(跳出),  continue(继续)

  break语句:应用范围:选择结构和循环结构。

  continue语句:应用于循环结构。

  注:

    a,这两个语句离开应用范围,存在是没有意义的。

    b,这个两个语句单独存在,下面都不可以有语句,因为执行不到。

    c,continue语句是结束本次循环继续下次循环。

    d,标号的出现,可以让这两个语句作用于指定的范围。

  

  语句总结:

    什么情况下,使用哪个语句?

      1:当对某几个值进行判断的时候,可以使用if语句,或者switch语句。建议使用switch。但是,使用switch要注意,它只能操作四种类型的值,byte,short,int,char。

         如果是四种以外的值,需要使用if。

      2:如果对数据区间进行判断,或者对运算结果是boolean类型的进行判断,用if语句。

        3:当需要某些语句执行很多次的时候,使用循环结构。如果定义变量只为循环增量存在时,可以使用for语句。

         如果对一个条件进行一次判断使用if,如果对该条件进行多次判断,使用while

      4:如果要结束循环,可以控制循环条件,或者通过break语句完成。如果要控制循环的流程,是否该继续执行,可以通过continue或者break来完成。

      5:break结束当前所在循环。continue结束本次循环,进入下一次循环。

     一但代码有重复的,就要考虑代码的重用性。

  

原文地址:https://www.cnblogs.com/zyh-blog/p/3162206.html