A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张博文

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 张博文 初级黑马   /  2018-4-1 20:02  /  803 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java语言平台:
        JAVA.SE:桌面应用开发程序(如坦克大战)
        JAVA.ME:手机嵌入式开发
        JAVA.EE:企业版应用程序

环境搭建
        JVM
        JRE:运行环境
        JDK:JRE+开发工具(javaa.exe,java.exe)
        java语言特点:
                跨平台(移植性),开源性

常用DOS命令:
                win+r cmd回车
        常用命令:
                d  :  回车  盘符切换
                dir:显示当前目录
                cd+目录名称               
                cd..回车,(回退)       
                cd\多级回退
                cls清屏
                exit :退出dos

关键字概述及特点:
        被java预言赋予了特定含义的单词.
       
        特点:
                a.组成关键字的字母全部小写
                b.常用的代码编辑器.有特殊的字体颜色

常量.变量.数据类型,标识符:
        常量:在程序执行中,其值不可以发生改变的量
        分类:a.整数
             b.小数常量
        变量:在程序执行中,其值可以某个范围内发生改变的量(                是内存中的一小块区域)
        组成:
                a.对区域要有限定
                b.不需对区域给一个名称
                c.区域内必须有内容
               
                数据类型 变量名 = 初始化值

数据类型:
        分类:A.基本数据类型
             B.引用数据类型(类.接口,数组)
                基本数据类型:
                        四类八种

        *整数默认为int类型,浮点数默认为double
        *float类型后面需要加F,long类型后面可以加L或者不加
                不加在于取值在int的取值范围中
        *float取值范围比long的取值范围小

标识符的组成和注意事项:

常见命名规则:
        a.包(全部小写,多级包用.隔开)
        b.类
        c.方法和变量
        int a;
        a = 10;与int a = 10 一样
        int a,b;
        a = 10;
        b = 20;与int a = 10;
         int b = 20;

数据类型中的转换:
        隐式类型转换(自动类型提升)
        强制类型转换
                目标类型 变量名 = (目标类型) (被转化的数据)
                byte       d    =  (byte)     (a+b)
               

        不同类型之间做运算的取值范围:
                byte short char---int---long----float double
               
快捷键及内容辅助键:

内容辅助键:
        使用main方法:alt + /
        使用输出语句:alt + /

快捷键:
        单行选中内容:ctrl + /,再来一次取消
        多行选中内容;ctrl+shift+/,取消ctrl+shift+\
        格式化:ctrl+shift+f或者右键--source--format       






算术运算符的基本用法:
        1.运算符:就是用于对常量和变量进行操作的符号

        2.表达式:用于运算符连接起来的符合java语法的式子.不同的运算符连接的表达方式是不同类型的表达式.

        3.运算符分类:
                算术运算符:
        a.当左边的绝对值小于右边的绝对值时,结果是左边;
        b.当左边的绝对值等于右边的绝对值时,结果为0
        c.当左边的绝对值大于右边的绝对值时,结果是余数
        d.%运算符结果的符号只和左边有关,与右边无关
        e.任何正整数%2结果不是0就是1可以用来当做切换条件

                +,-,*,/,%,++,--
                注意:整数相除只能得到整数,如果想要得到小数,必须要有浮点数参与运算.
                %用于获取两个数据相除的时候余数
                /:用于获取两个数据相除是的商
                字符参与加法运算,其实是拿字符再计算机中存储的数据值来参与运算
7

                'A'65
                'a'97
                '0'48

                字符串参与运算:其实做的不是加法运算,而是做的字符串的拼接 (当常量在前要先运算在拼接)如:
int a = 10;int b = 20
                System.out.println("hello" + a + b )===>>hello1020
int a = 10;int b = 20
                System.out.println(a + b + "hello")===>>30hello

                ++,--单独使用时,++或者--放在前面或者后面结果一样.
                ++,--参与运算
                ++在前面,先自身+1在参与运算
                ++在后面,先提出a参与运算,在自身+1
--同理

*****扩展的赋值运算符,隐含了强制类型转换

                赋值运算符 :
                        基本赋值运算符:=
                        扩展的赋值运算符:+=,-=,*=,/=,%=
                关系运算符:==,!=,<,>,<=,>=
关系运算符的结果为boolean类型       
*****关系表达式.条件表达式.布尔表达式的关系.都是布尔类型

注意事项:千万不要把两个=写成一个=,一个就为赋值含义,两个才是比较是否相等.

               
                逻辑运算符
        &遇false则false
        |遇true则true
        ^两边相同为false,两边不同为true
        !非false则false,非非false则false
       
        &&具有断路作用,当第一个判断为false时,后面不执行
        ||具有短路作用,当第一个判断为true时,后面不执行


                三元运算符:
        关系表达式?表达式1:表达式2
        A.执行流程:a.计算关系表达式的值,看是ture还是false
                    b.如果是ture,表达式1执行,如果是false,执行表达式2
        如:class Dome2 { //比较三个数最大值
        public static void main(String[] args) {
                int a = 30;
                int b = 40;
                int c = 90;
                int temp = (a<b)?b:a;
                int max = (temp>c)?temp:c;
                System.out.println("max = " + max);
        }
}


键盘录入的基本步骤和使用:
        键盘录入:
                为了提高程序的灵活性,我们就把数据改进为键盘录入.
        使用步骤:a.导包
                        import java.util.Scanner;
                        在一个类中顺序:package>import>class
                  b.创建键盘录入对象:
                        Scanner sc = new Scanner(System.in);
                   c.接收数据(调用Scannner对象)
                        int i = sc.nextInt();
        例子:
import java.util.Scanner;

class Dome2 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                        System.out.println("请键盘输入一个值");
                int i= sc.nextInt();
                System.out.println("i = " + i);
        }
}


        键盘录入两个值,求两个值的和:
        例子: import java.util.Scanner;

class Dome2 {
         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();

                        int sum = a + b ;
                        System.out.println("sum = " + sum);
         }
}





/*import java.util.Scanner;

class Dome2 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                        System.out.println("请键盘输入一个值");
                int i= sc.nextInt();
                System.out.println("i = " + i);
        }
}


import java.util.Scanner;

class Dome2 {
         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();

                        int sum = a + b ;
                        System.out.println("sum = " + sum);
         }
}*/



*内容辅助键:
*         A.main方法:
*                 先输入main 然后alt + / 然后回车
*         B.输出语句:
*                 先输入syso 然后alt + / 然后回车
*
*往下复制 :
*        选中一行 然后crtl + alt +下键
*往上复制同理
*
*往下移动
*        选中一行 然后alt + 下键
*往上移动同理
*
*光标在某一行的随便一个位置时 用shift + 回车 可以直接打开新的一行
*
*添加多行注释:
*        选中需要添加的部分 shift + alt +/(带问号的那个键)
取消多行注释:
*选中已经添加多行注释的部分 shift+alt+\(带|的这个键)
添加单行注释:
        选中需要添加的部分 ctrl + /(带问号的那个键)
取消单行注释:
        选中需要添加的部分 ctrl + /(带问号的那个键)
*删除一行:
*        光标在某一行 然后ctrl + d
*



_Java开发工具(Eclipse工作空间的基本配置)(掌握)
* A:程序的编译和运行的环境配置(一般不改)
        * window -- Preferences -- Java
        * 编译环境:Compiler        默认选中的就是最高版本。
        * 运行环境:Installed JREs        默认会找你安装的那个JDK。建议配置了Java的环境变量(不配找不到)。
        * 问题:
                * 低编译(编译的版本比较低),高运行(运行的版本比较高)。可以。
                * 高编译,低运行。不可以。
                * 建议,编译和运行的版本一致。
* B:如何去掉默认注释?
        * window -- Preferences -- Java -- Code Style -- Code Templates--Code
        * 选择你不想要的内容,通过右边Edit编辑。
        * 注意:请只删除注释部分,不是注释部分的不要删除。

* C:行号的显示和隐藏
        * 显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。
        * 隐藏:把上面的动作再做一次。
* D:字体大小及颜色
        * a:Java代码区域的字体大小和颜色:
                * window -- Preferences -- General -- Appearance -- Colors And Fonts --Java修改 -- Java Edit Text Font--edit进行修改
        * b:控制台
                * window -- Preferences -- General -- Appearance -- Colors And Fonts -- Debug -- Console font
        * c:其他文件
                * window -- Preferences -- General -- Appearance -- Colors And Fonts -- Basic -- Text Font
* E:窗体给弄乱了,怎么办?
        * window -- Reset Perspective
* F:控制台找不到了,怎么办?
        * Window--Show View—Console
* G:取消悬浮提示(将鼠标停留在某个类上所出现的提示信息)
        * window -- Preferences -- Java--Editor--Hovers。右边将Combined Hover勾去掉。
        * 这样代码的悬浮框就不会自动出现了。如果想看提示,将光标悬浮在代码上,按F2即可。
       
运算符:
        算数运算符
                整数相除,结果还是整数
               
                注意事项:
                * a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
                * b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
                * c:/获取的是除法操作的商,%获取的是除法操作的余数
                * %运算符
                        * 当左边的绝对值小于右边绝对值时,结果是左边
                        * 当左边的绝对值等于右边或是右边的倍数时,结果是0
                        * 当左边的绝对值大于右边绝对值时,结果是余数
                        * %运算符结果的符号只和左边有关系,与右边无关
                        * 任何一个正整数%2结果不是0就是1可以用来当作切换条件
               
                'a'  97
                'A'  65
                '0'  48
                'A' + 10  ==> 65 + 10 = 75
               
                字符串与任何数据做加法运算,都会产生一个新的字符串
                "abc" + 10 + 20 ==> "abc10" + 20 ==> "abc1020"
                10 + 20 + "abc" + 10 + 20 ==> 30 + "abc" + 10 + 20 ==> "30abc" + 10 + 20 ==> "30abc1020"
               
                ++   --
               
                byte a = 10;
                a += 20;
               
        逻辑运算符
         & : 有假则假
         | : 有真则真
          ! : 事物的另一面
         ^ : 相同为false,不同为true
         
         && 和 & 的区别:
                 & 是左右两边都需要进行计算
                 && 如果左边为false,右边不执行
         || & | 的区别:
                 | 是左右两边都需要进行计算
                 || 如果左边为true,右边不执行
                
        三元运算符(三目运算符)
                关系表达式 ? 表达式1 : 表达式2(表达式必须是一个具体的结果.不能是输出语句)
                int a = 20;
                int b = 30;
                int result = a > b ? a : b;
               
                boolean flag = (a == b ? true : false);
                boolean flag = (a == b);


流程控制语句:
        分类:
            顺序结构:从上而下,依次执行
            选择结构(分支结构):
        A.if(关系表达式) {
                语句体
}
        B.        if (关系表达式) {
                语句体1
        }else {
                语句体2
                }
        C.        if (关系表达式) {
                语句体1
        }else if (关系表达式) {
                        语句体3
        }else {        (else可以省略不写,但是建议书写,我么所考虑的条件可能并不全面,需要让else来表示我们考虑不到的内容)
                        语句体4
                        }
                语句体2
            循环结构:switch语句
                        switch(表达式) {
                                case1:
                                        语句体1;
                                break;
                                case21:
                                        语句体1;
                                break;
                                case3:
                                        语句体1;
                                break;
                                .........
                                default:
                                        语句体n+1;
                                break;
                        }
                格式解释:
                        byte,short,int,char
                                JDK5以后可以使用枚举,
                                JDK7以后可以使用字符串(String)
                       
                        case:的值就是用以来和表达式的值进行匹配的内容
                        default:所有的值都不匹配时,就执行default(可以省略不写)
                        ****8如果所有的case都不匹配,就执行语句体n+1
                        ****当语句中没有break时,会直接形成穿透,就算有case值满足但是没有break就不会结束,直接进行下一个case值判断,直到遇到default
                        *****switch语句结束的两种情况:
                                        a.遇到break结束
                                        b.遇到switch语句的右大括号结束
                for 语句和while 语句及do...while语句的区别;
                for语句在循环后所设置的变量不能被使用,
                while语句在循环后所设置的变量可以被使用
                do...while语句在循环中至少要在执行一次
               

跳转控制语句break的概述和基本使用
        break:中断的意思
        使用场景:a.switch语句中
                         b.循环中
         作用:用于结束循环
         continue:继续的意思(结束本次循环,但是会继续下次循环)
         使用场景:循环中
         ***离开循环是没用的


         ********键盘录入时导包的三种方式:
                        a.ctrl+shift+o
                        b.手动导入
                        c.鼠标点击

Random:用于产生随机数,
        使用步骤:
                A.导包
                        import java.util.Random;
                B.创建对象
                        Random r = new Random();
                C.获取随机数
                        int number = r.nextInt(10);
                        获取数据的范围[0,10).包括0,不包括10
                如何获取[0,10]之间的数?
                int number = r.nextInt(100)+1

Random 练习猜数字小游戏:
        分析:a.首先利用 Random 获取一个0-100之间的随机数字
                 b.然后键盘输入一个感觉能够猜中的数字
                 c.比较这两个数据,用if语句实现
                        1.当猜的数字比随机生成的数字大,提示猜的数字大了
                        1.当猜的数字比随机生成的数字大,提示猜的数字小了
                        1.当猜的数字与随机生成的数字相等,提示恭喜您猜中了
                  d.但是在竞猜过程中不太现实一次就能猜中,所以需要进行多次竞猜,利用while语句的死循环进行操作

例: import java.util.Random;  //导包
        public class RandomTest {  //创建的类
                public static void main(String[] args) {
                        //系统产生一个随机数字
                        Random r = new.Random();
                        //这个随机数字在0-100之间
                        int number = r.nextInt(100)+1;

                        while(true) {   //多次猜数字
                                //键盘录入我们要猜的数据
                                Scanner sc = new Scanner(System.in);
                                System.out.println("请输入你要猜的数据(0-100):");
                                int a = sc.nextInt();
                                //判断输入的数据与产生的随机数字是否相等
                                if (a>number) {
                                        System.out.println("你输入的数据" + a + "大了");
                                } else if (a<number) {
                                        System.out.println("你输入的数据" + a + "小了");
                                } else {
                                        System.out.println("恭喜你猜中了");
                                        break;
                                }
                        }
                }
        }

数组概念;
        数组是存储同一种数据类型多个元素的容器。
        数组既可以存储基本数据类型,也可以存储引用数据类型

数组的定义格式:
        格式1:数据类型[] 数组名;
        格式2:数据类型 数组名[];       
        注意:这两种定义做完了,数组中是没有元素值的

数组初始化的概述:
        Java中的数组必须先初始化,然后才能使用。
        所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值

        动态初始化:
                格式:数据类型[] 数组名 = new 数据类型[数组长度];
                                数组长度其实就是数组中元素的个数
                举例:
                int[] arr = new int[3];
                解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值
                ********数组前后的数据类型要一致
定义格式:
*                 A:数据类型[] 数组名;
*                 B:数据类型 数组名[];
* 举例:
*                 A:int[] a; 定义一个int类型的数组,数组名是a
*                 B:int a[]; 定义一个int类型的变量,变量名是a数组
*
* 数组初始化:
*                 A:所谓初始化,就是为数组在内存中开辟连续内存空间,并为数组中的每个元素赋予初始值
*                 B:我们有两种方式对数组进行初始化
*                         a:动态初始化        只指定长度,由系统给出初始化值
*                         b:静态初始化        给出初始化值,由系统决定长度
*
* 动态初始化:
*                 数据类型[] 数组名 = new 数据类型[数组长度];

       
       
        静态初始化的格式:
*                 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
*
*                 简化格式:
*                         数据类型[] 数组名 = {元素1,元素2,...};
*
*                 举例:
*                         int[] arr = new int[]{1,2,3};
*
*                 简化后:
*                         int[] arr = {1,2,3};
                静态初始化简写后:
                        局限性,数组的声明与赋值分开写的时候,简写形式行不通
                                int[] arr = {1,2,3};
                                int[] arr;
                                arr = {1,2,3};*******这种方式行不通

jvm内存划分:
        栈 存储局部变量(方法声明上.或者方法中声明的变量),使用完毕立即回收
        堆 存储new出来的东西,使用完毕.在垃圾回收器空闲 的时候回收
        方法区 (面向对象进阶讲)
        本地方法区 (和系统相关)
        寄存器 (给CPU使用)


数组使用的两个小问题:
        两个常见小问题:
*                 A:java.lang.ArrayIndexOutOfBoundsException
*                         数组越界异常
*                         产生的原因:就是你访问了不存在的索引元素。
*                 B:java.lang.NullPointerException
*                         空指针异常
*                         产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
* 为什么我们要记住这样的小问题呢?
*                 编程不仅仅是把代码写出来,还得在出现问题的时候能够快速的解决问题。
*/                        ************null只能赋值给引用数据类型变量
public class ArrayDemo {
        public static void main(String[] args) {
                // 定义数组
                int[] arr = { 1, 2, 3 };
               
                //System.out.println(arr[3]);
               
                //引用类型:类,接口,数组
                //常量:空常量 null,是可以赋值给引用类型的
                //arr = null;
                System.out.println(arr[1]);
        }
}



数组的遍历:
        依次输出数组中的每一个元素
        为了解决我们去数数组中元素的个数,数组就提供了一个属性:length
        用于获取数组元素的个数
        格式:数组名.length
        例:System.out.println("数组中元素一共有" + arr.length + "个");


二维数组:其实就是元素为一维数组的数组
        定义格式:
                A.数据类型 [] [] 数组名;(推荐方式)
                B.数据类型数组名[] []
                C.数据类型[] 数组名 []
       
        初始化:
                A.动态初始化
                        数据类型 [] [] 数组名 = new 数据类型{m} {n}
                        m表示是二维数组中一维数组的个数
                        n表示是一维数组的个数
                B.静态初始化:
                                数据类型 [] [] 数组名 = new 数据类型 [] [] {{元素...},{元素...},{元素...}}
                                简化格式
                                        数据类型 [] [] 数组名 = {{元素...},{元素...},{元素...}}
                                例子:
                                        int[] [] arr = {{1,2,3},{4,5,6},{7,8,9}}

                        System.out.println(arr);[[I@104c575
                        System.out.println(arr[0]);[I@3fa5ac
                        System.out.println(arr[1]); [I@95cfbe
                        System.out.println(arr[2]);[I@179dce4
                        说明arr[0]在二维数组中获取的不是数组中的元素,而是二维数组中第一个数组的地址

                **那如何获取二维数组中的元素呢?
                                二维数组名配合索引可以获取到每个一维数组
                                每一个一维数组配合索引名可以获取到数组中的元素
                                       
                                *假如我有一个二维数组:arr
                                *我要从中获取一维数组:arr[索引]
                                *我要从中获取二维数组中的元素:arr[索引][索引]
                        System.out.println(arr[0][0]);
                        解释:在二维数组中的获取第一个数组中第一个元素



        System.out.println();输出内容,并换行
        System.out.print();只输出内容,不换行

        定义格式:
                修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2....)
                        方法体;
                        return返回值;
       
        格式解释:
                A.修饰符:目前记住 public static
                B.返回值类型   用于限定返回值的数据类型
                C.方法名  为了方便我们使用方法的名字
                D.参数类型 用于限定调用方法时传入的数据的变量
                E.参数名 用于接收调用方法时传入的熟路的变量
                F.方法体   完成功能的代码块
                G.return 结束方法,并且把返回值带给调用者

写一个方法有两个明确:
        A.返回值类型 明确功能结果的数据类型
        B.参数类型   明确有几个参数,以及参数的额数据类型

方法中void的使用;
        没有明确的返回值的时候使用,那么该方法的返回值类型就是;
        而且只能单独输出void
        方法返回值如果是void类型时,如果方法体中没有书写return时.系统会自动帮我们添加一个return;



方法的重载:在同一个类中出现方法名相同,类型不同的方法
                特点:
                        方法名相同
                        参数列表不同
                                个数不同.类型不同.顺序不同
                        与返回值无关


方法的参数如果是基本数据类型,形式参数的改变不影响实际参数
                实际参数.实际参与运算的数据
                形式参数:用于接收实际参数的变量


                如果参数是引用数据类型,形式参数的改变会直接影响实际参数的值的改变(因为两个参数的地址值相同,例如引用数据类型为数组)

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


断点:其实就是一个标记

在哪里加断点?
        那你不会加哪里

如何加断点:
        在代码区域的左边双击即可


如何运行加断点的程序呢?
        代码区域----右键-----Debug  As----java Application
        弹出一个框框让我们选择是否进入debug视图,我们选择YES,并且把记住的那个框框也选上
       
         
如何让程序往下执行呢?
        F6;

看那些区域呢?(f11)
        代码区域:看程序的执行流程
        Debug区域:看程序的执行流程
        Variables:看变量的变化
        Console:看程序的输入和输出


如何去掉断点呢?
        A.把加断点的动作在来一遍(在次双击)
        B.在Debug视图中找到Breakpoints,选中要删除的断点,点击双X即可

F5:进入方法
F6:一步步执行
F7:在进入方法中,在次返回该方法

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马