黑马程序员技术交流社区

标题: Java基础总结 [打印本页]

作者: 天亮的哥    时间: 2018-3-24 20:05
标题: Java基础总结
一.JVM,JRE,JDK的概述

1.什么是跨平台?

        平台:指的是操作系统(Windows,Linux,Mac)

        跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行

        原理:实现跨平台需要依赖Java的虚拟机 JVM

2.JVM  JRE  JDK说明
        1.什么是JVM?
           JVM是Java虚拟机,Java程序需要运行在虚拟机上,不同平台有自己的虚拟机       
        2.什么是JRE?
           包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
              JRE:JVM+类库。
        3.什么是JDK
           JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,        就不用在        单独安装JRE了。
           其中的开发工具:编译工具(javac.exe) ?打包工具(jar.exe)等
?           JDK:JRE+JAVA的开发工具。
        4.为什么JDK中包含一个JRE
           为什么JDK中包含一个JRE呢?
           开发完的程序,需要运行一下看看效果。
        5.JDK,JRE,JVM的作用和关系
           JDK包含JRE 和开发工具包
           JRE 包含 核心类库和JVM
二.JDK的下载和安装
        a.下载:http://www.oracle.com
        b.安装:参考文档
        c.JDK安装路径下的目录解释
                bin:存放可执行程序,如windos系统中的exe文件;有哪些:javac.exe;java.exe
                jre:java程序的运行时环境
                src.zip:JDK的核心源代码,src即source的意思

三.开发工具介绍
        1).notepad(记事本)
        2).Editplus,还有:notepad++
        3).Eclipse,还有:MyEclipse,idea

四.HelloWorld案例
        编写步骤:
                1).切换到JDK安装路径下的bin目录
                2).编写Java文件
                        新建一个文本文件,将后缀名改为.java
                3).编译Java文件(会生成一个.class文件)
                        在当前目录下按住shift点击鼠标右键,弹出DOS命令行,输入javac 文件名(是java文件的文件名,带后缀)
                4).运行Java文件
                        在DOS命令行中,输入java 文件名(是class文件的文件名,不带后缀)
        注意事项(具体内容参考大纲)
        书写格式:
                1).大括号成对写,并且要对其
                2).左大括号左面要有空格
                3).遇到左大括号要缩进(Tab键)
                4).运算符两侧加空格,如 5+2--> 5 + 2

五.Path环境变量
        1).为什么需要配置path环境变量?
        2).配置了path环境变量之后有什么好处?
                a.这样我们就可以在任意盘符,任意文件去使用javac,java这样的应用程序
                --->意味着我们可以在任意盘符,任意文件中去编写我们的代码
        3).path环境变量的配置方式1(了解)
        4).path环境变量的配置方式2(重点!!!)
                a.新建系统变量JAVA_HOME
                b.将JAVA_HOME配置到Path中,配置方法:%JAVA_HOME%\bin
六.注释
        1).分类
                a.单行注释:
                        //注释内容
                b.多行注释:
                        /*
                                注释内容
                                注释内容
                                注释内容
                        */
                c.文档注释:
                        /**
                        */
        2).作用
                a.解释说明程序
                b.调错

七.关键字
        1).什么是关键字?
                被java赋予特定含义的单词
        2).特点:
                组成关键字的字母全部小写
        3).注意事项:
                我们在起名字的时候不能使用关键字

八.标识符
        1).什么是标识符:就是给类,接口,方法,变量起的名字
        2).标识符的组成
                * 英文大小写字母
                * 数字
                * $和_
        3).注意事项(重点!!!):
                1.不能使用关键字
                2.不能以数字开头
                3.如果你要使用符号,只能使用$和_
        4).常见命名规则(重点!!!):
                * 包:把包理解成我们的文件夹,一般是公司域名倒着写,com.itheima
                * 类或者接口
                        如果是一个单词,首字母大写
                        如果是多个单词,每个单词的首字母都大写
                * 方法或者变量
                        如果是一个单词,全部字母小写
                        如果是多个单词,从第二个单词开始首字母大写
                * 常量
                        如果是一个单词,全部字母大写
                        如果是多个单词,每个单词之间用_分开

九.常量
        字面值常量
                字符串常量        用双引号括起来的内容
                整数常量        所有整数
                小数常量        所有小数
                字符常量    用单引号括起来的内容,里面只能放单个数字,单个字母,单个符号
                布尔常量        true,false
                空常量                null(数组部分讲解)
        自定义常量(面向对象部分讲解)
       
十.变量(重点!!!)
        1).什么是变量?
                在程序执行的过程中,其值可以发生改变
        2).为什么有变量?
                用来不断的存放同一类型的常量,并可以重复使用
        3).变量定义格式
                数据类型 变量名 = 变量值;

十一.数据类型(重点!!!)
        1).为什么有数据类型?
                Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
        基本数据类型(四类八种)
                整数型
                        byte        占1个字节        -128到127
                        short        占2个字节
                        int                占4个字节
                        long        占8个字节
                浮点型(小数型)
                        float        占4个字节
                        double        占8个字节
                字符型
                        char        占2个字节        0-65535
                布尔型
                        boolean 他的值要么是true,要么是false
        引用数据类型(面向对象部分讲解)
        *** 练习:定义不同数据类型的变量,并输出
        2).使用变量的注意事项
                * a:作用域问题
                        * 同一个区域不能使用相同的变量名(我们目前的同一个区域指的就是main方法)
                * b:初始化值问题
                        * 局部变量在使用之前必须赋值
                * c:一条语句可以定义几个变量
                        * int a,b,c...;

十二.数据类型转换
        1).隐式转换
        class Test {
                public static void main(String[] args) {
                        byte a = 3;
                        int b = 4;
                        //byte + int---->小的数据类型与大的数据类型运算的时候,小的数据类型会自动提升为大的数据类型
                        int c = a + b;
                        //b = a + b;
                        System.out.println(c);
                }
        }
        2).强制转换
        class Test {
                public static void main(String[] args) {
                        byte a = 3;
                        int b = 4;
                        a = (byte)(a + b);//注意:byte需要使用小括号括起来
                        System.out.println(a);

                }
        }


eclipse:
        eclipse的安装和使用:eclipse是用java开发的 所以他的打开是要有配置jdk的环境变量

运算符:

        算术运算符
                表达式:用符号连接的式子(不能自成语句),除了复制运算符;
                       
                + - * /
                注意:/  整数相除 得整数 要想结果得到小数  必须有小数参加运算符
               
                % : 取余数
               
                字符和字符串参加运算符:
                        +:字符串连接符  (紧挨着字符串的那两个+号是字符串连接符)
                        字符和int值相加:
                                字符会变成值 再去加。  为什么字符会变成值呢?
                                涉及到了编码表。 因为计算机只能存储数,怎么存储 字符呢?  由编码表对应去存。

                ++ --
                        int a = 10;
                        // 当 ++ 放在变量的后面 ,a自己+1 ,a++整体不便
                        //int b = a++;
                        // 当++  放在变量的前面, a自己+1, ++a整体+1
                        int b = ++a;
                        System.out.println(a); //11
                        System.out.println(b); //

        逻辑运算符
                & : 和                        真和假   有假则假
                | : 或                        真或假   有真则真
                ^ : 异(是否不同)        是不同 真, 是相同 假,
                ! : 非 取反                非真则假  非假则真
               
                参与逻辑运算符的量 都必须是 Boolean类型的, 结果也都是Boolean类型的


                &&:和&执行结果一样, && 效率高。 true && false ,当左侧是false的时候 右边不再看
                ||:
        关系运算符
                == != > <
                有关系运算符计算出来的结果 都是boolean类型的
                System.out.pritln(a=b); 打印的b的值
        赋值运算符
                int a = 1;
                += -= *=

        三元运算符
                (条件表达式)? TRUE:FALSE;
                例题:比较三个数的最大值
                        a > b && a > c ? a : (b > c) ? b : c;

键盘录入:
        练习题: 键盘输入两个数, 打印出较大的那个值。
        1:第一步:导包
                在类的上面写 import java.util.Scanner;
        2:第二步: 创建Scanner对象
                Scanner sc = new Scanner(System.in);
        3: 第三步: 对象调nextInt()方法
                int a = sc.nextInt();

import java.util.Scanner;
public class ScannerTest{
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入第一个数");
                int a = sc.nextInt();
                System.out.println("请输入第二个数");
                int b = sc.nextInt();          
                System.out.println(a>b?a:b);
        }
}






        选择流程控制语句

        顺序结构概述

        是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
       
        if语句的格式

        第一种:

        if(关系表达式) {
                     语句体
        }

        执行流程:
                首先判断关系表达式看其结果是true还是false
                如果是true就执行语句体
                如果是false就不执行语句体

        if语句第二种格式:

        if(关系表达式) {
                     语句体1;
        }else {
                     语句体2;
        }
                执行流程
                        首先判断关系表达式看其结果是true还是false
                        如果是true就执行语句体1
                        如果是false就执行语句体2

        if语句第三种格式:
                if(关系表达式1) {
                             语句体1;
                }else  if (关系表达式2) {
                             语句体2;
                }
                    …
                else {
                             语句体n+1;
                }

        switch语句的格式及执行流程

                        执行流程
                                首先计算出表达式的值
                                其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
                                最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

        for循环的格式及基本使用

                for循环语句格式:

                for(初始化语句;判断条件语句;控制条件语句) {
                         循环体语句;
                    }

                执行流程:
                        A:执行初始化语句
                        B:执行判断条件语句,看其结果是true还是false
                        如果是false,循环结束。
                        如果是true,继续执行。
                        C:执行循环体语句
                        D:执行控制条件语句
                        E:回到B继续


        while循环语句格式
                        基本格式:

                                   while(判断条件语句) {
                                         循环体语句;
                                   }

                        扩展格式:

                                   初始化语句;
                           while(判断条件语句) {
                                 循环体语句;
                                 控制条件语句;
                                }

        do…while循环语句格式
                        基本格式

                                   do {
                                         循环体语句;
                                   }while((判断条件语句);

                        扩展格式

                                   初始化语句;
                                   do {
                                         循环体语句;
                                         控制条件语句;
                                } while((判断条件语句);


        三种循环的区别

                        虽然可以完成同样的功能,但是还是有小区别:
                        do…while循环至少会执行一次循环体。
                        for循环和while循环只有在条件成立的时候才会去执行循环体
                        for循环语句和while循环语句的小区别:
                        使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

        Break的使用场景和作用

                        break的使用场景:
                                在选择结构switch语句中
                                在循环语句中

                        break的作用:
                                跳出单层循环

        continue的使用场景:

                        在循环语句中
                        离开使用场景的存在是没有意义的

        continue的作用:

                        单层循环对比break,然后总结两个的区别
                        break  退出当前循环
                        continue  退出本次循环

选择流程控制语句

        顺序结构概述

        是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
       
        if语句的格式

        第一种:

        if(关系表达式) {
                     语句体
        }

        执行流程:
                首先判断关系表达式看其结果是true还是false
                如果是true就执行语句体
                如果是false就不执行语句体

        if语句第二种格式:

        if(关系表达式) {
                     语句体1;
        }else {
                     语句体2;
        }
                执行流程
                        首先判断关系表达式看其结果是true还是false
                        如果是true就执行语句体1
                        如果是false就执行语句体2

        if语句第三种格式:
                if(关系表达式1) {
                             语句体1;
                }else  if (关系表达式2) {
                             语句体2;
                }
                    …
                else {
                             语句体n+1;
                }

        switch语句的格式及执行流程

                执行流程
                                首先计算出表达式的值
                                其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
                                最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

        for循环的格式及基本使用

                for循环语句格式:

                for(初始化语句;判断条件语句;控制条件语句) {
                         循环体语句;
                    }

                执行流程:
                        A:执行初始化语句
                        B:执行判断条件语句,看其结果是true还是false
                        如果是false,循环结束。
                        如果是true,继续执行。
                        C:执行循环体语句
                        D:执行控制条件语句
                        E:回到B继续

        while循环语句格式
                        基本格式:

                                   while(判断条件语句) {
                                         循环体语句;
                                   }

                        扩展格式:

                                   初始化语句;
                           while(判断条件语句) {
                                 循环体语句;
                                 控制条件语句;
                                }

        do…while循环语句格式
                        基本格式

                                   do {
                                         循环体语句;
                                   }while((判断条件语句);

                        扩展格式

                                   初始化语句;
                                   do {
                                         循环体语句;
                                         控制条件语句;
                                } while((判断条件语句);


        三种循环的区别

                        虽然可以完成同样的功能,但是还是有小区别:
                        do…while循环至少会执行一次循环体。
                        for循环和while循环只有在条件成立的时候才会去执行循环体
                        for循环语句和while循环语句的小区别:
                        使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

        Break的使用场景和作用

                        break的使用场景:
                                在选择结构switch语句中
                                在循环语句中

                        break的作用:
                                跳出单层循环

        continue的使用场景:

                        在循环语句中
                        离开使用场景的存在是没有意义的

        continue的作用:

                        单层循环对比break,然后总结两个的区别
                        break  退出当前循环
                        continue  退出本次循环




方法(函数):
     
     方法的定义格式:
                修饰符  返回值  方法名(参数类型 参数名,参数类型,参数名2,...) {
                        方法体;
                        return 返回值;
                       
                }

                注意事项:
                        方法绝对不能嵌套,
                         方法不调用就不会执行  
                        方法的作用是为了提高代码的复用性;

                方法的调用:
                        有返回值的方法,可以输出调用,也可以直接调用,

                void 方法的调用:
                        当一个方法执行之后,不需要让这个方法返回一个值.那么这个方法的返回值写void

                        注意:void方法中也可以写return,但是return不能写值;

                方法的重载:
                        当一个类中,出现方法名相同,参数列表不同,与返回值无关,我们称这两个方法之间是重载关系

                        重载: 方法名必须相同,参数列表必须不同 , 返回值无关;

                                       
        基本类型的参数传递
                形式参数的改变不影响实际参数; 原因是因为 基本类型的数是存在栈内存中。
                内存:
                        栈: 执行方法用的
                        堆: 存储一些引用型数据的 数组
                        方法区:存储一些class文件的
                       
                        本地方法区: 存储一些本地方法的
                        寄存器:cpu

        引用类型的参数传递
                形式参数的改变会影响实际参数, 原因是因为,引用类型的数据存在堆内存中,可以有很多个引用执行的,很多个引用共享他。
                Eclipse断点调试
1.1Eclipse断点调试概述
  
        Eclipse的断点调试可以查看程序的执行流程和解决程序中的bug
1.2Eclipse断点调试常用操作:
         A:什么是断点:
                 就是一个标记,从哪里开始。
         B:如何设置断点:
                 你想看哪里的程序,你就在那个有效程序的左边双击即可。
         C:在哪里设置断点:
                 哪里不会点哪里。
                 目前:我们就在每个方法的第一条有效语句上都加。
         D:如何运行设置断点后的程序:
                 右键 -- Debug as -- Java Application
         E:看哪些地方:
                 Debug:断点测试的地方
                         在这个地方,记住F6,或者点击也可以。一次看一行的执行过程。
                 Variables:查看程序的变量变化
                 ForDemo:被查看的源文件
                 Console:控制台
         F:如何去断点:
                 再次双击即可
                 找到Debug视图,Variables界面,找到Breakpoints,并点击,然后看到所有的断点,最后点击那个双叉。




断点调试:
                A:查看程序的执行流程
                B:调试程序

断点:
                其实就是一个标记

在哪里加呢?
                想加哪里就加哪里,一般是加在我们看不懂的地方

如何加呢?
                在代码区域的最左边双击即可

如何运行加断点的程序呢?
                代码区域 -- 右键 -- Debug as -- Java Application
                会弹出一个页面让我们选择是否进入debug模式,选择yes。

如何让程序往下执行呢?
                Step Over 执行下一步
                F6

看那些区域呢?
                代码区域:看程序的执行步骤
                Debug区域:看程序的执行步骤
                Variables:看变量的创建,赋值,销毁等
                Console:看程序的输入和输出

如何去除断点:
                A:把加断点的动作再来一遍
                B:在debug视图中,找到Breakpoints,选中断点,点击双x即可

       



面向对象和面向过程

                面向过程: 这个过程很复杂,很繁琐,要自己动手自己去做.

                面向对象: 去找个对象,让对象去做,自己悠闲.
               
                类和对象:java描述一类事物的时候:定义为类
                          我们所找的对象帮我们做事情, 这个对象 就是那一类事物中的一员

事物:
                属性:姓名 年龄 性别...
                行为:能做什么  

                应该在类当中定义为:
                成员变量:
                        类中 方法外面;
                        不需要初始化;

                局部变量
                                定义在方法里面的变量,这样的变量叫做局部变量 这样的变量在使用之前必须先初始化。
                        成员方法:
                                普通的方法 但是去掉static

               
                成员变量和局部变量的区别:

                        写的位置不同:
                                成员变量:类中 方法外
                                局部变量: 方法内
                        内存位置不同:
                                成员变量: 堆
                                局部变量: 栈
                        声明周期:
                                成员变量:随着对象的创建而存在 随着对象的消失而消失
                                局部变量:随着方法的调用而存在 随着方法的调用完毕而消失
               
                        初始化:
                                成员变量:有默认初始化
                                局部变量:没有默认初始化 : 所以使用之前必须先赋值。

        private 关键字: 修饰成员的关键字(一般用来修饰成员变量)

                别private修饰的成员只能在本类中访问,之外的任何地方都不能直接访问
                一般用private修饰的成员变量会对外界提供一个setXxx()和getXxx()的方法



        封装:
                把不需要对外展示的内容 隐藏起来,并对外提供公共的访问方式。
                比如面向对象: 成员变量加private 提供公共的set和get方法。
       
                好处:安全, 提高代码的复用性

        就近原则:
                方法内,在使用变量的时候,会先去局部范围找这个变量,有就使用, 如果没有 才去成员位置找这个变量,                如果有就使用,如果没有就报错了。
       
        this:
                代表的是当前类的当前对象
                this说: 谁调用我  我就是谁

       
        构造方法:
                1:创建对象的时候 就肯定会调用构造方法;
                        顾名思义: 为了创建对象而存在的方法
                2:如果我们在一个类中没有给出任何构造方法, 系统会提供一个默认的 无参构造。
                3:如果我们提供了任何构造方法,系统就不会再听默认的无参构造方法了
                4:一个类中可以有多个构造方法,只要参数列表不同即可,也就是构造方法可以重载。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2