Java程序设计基础

cmd的使用方法

环境变量的配置

 

 

 

 

第一章 Java基础

1.1Java语言开发环境开发及搭建

1、JRE:是Java程序的运行环境,包含JVM和运行时所需的核心类库

2、JDK:是Java程序开发工具包,包含JRE和开发人员使用的工具

1.2 Java注释

1、单行注释和多行注释

2、Java语言中每一行代表的意思:

1.3 关键字

  1、关键字的特点:

    1)完全小写的字母;

    2)在增强版的记事本当中有特殊颜色。

1.4 标识符

    1、定义

    是指在程序中,我们自己定义的内容。比如类的名称、方法的名字和变量的名字等等,都是标识符。

 2、命名规则

    1)标识符可以包含英文字母(区分大小写)、数字、$(美元符号)、_(下划线)

    2)标识符不能以数字开头

    3)标识符不能是关键字

 3、命名规范

    1)类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。

    2)变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。例如:helloWorld

    3)方法名规则:同变量名。

## 1.5常量

  1、定义:

    在程序运行期间,固定不变的量。

  2、常量的分类:

    1)字符串常量:凡是用双引号 引起来的部分,叫做字符串常量。

    2)整数常量:直接写上的数字,没有小数点。

    3)浮点数常量:直接写上的数字,有小数点。

    4)字符常量:凡是用单引号引起来的单个字符,叫做字符常量。

    5)布尔常量:只有两中取值。true、false

    6)空常量:null。代表没有任何数字。

    

 

1.6 基本数据类型

  1、整形  

    1)byte

    2)short

    3)int

    4)long

  2、字符型

    char

  3、浮点型

    1)float

    2)double

  4、布尔型

    boolean

    

 

 注:Java默认类型为:整数类型int和浮点数类型double

    

 

1.7 数据类型的转换

    

 

     

 

1.8强制数据类型转换

  

 

 数据溢出:

    

 

 

    

 精度损失:

     

 

 

1.9 ASCII码

   

 

1.10 运算符

  1、四则运算符

    

 

     

 

   2、四则运算中 ’+‘的用法有三种:

    

 

     

 

   3、自增自减运算符

    单独使用:

      

 

       混合使用:

        

 

         

 

         

 

         注:只有变量才可以有自增、自减操作,常量不可能发生改变,所以不可用。

    4、赋值运算符

      

 

         注:1)只有变量才能使用赋值运算符,常量不能进行2赋值;    

         2)复合运算符其中隐含一个强制类型转换;例如:

        

 

   5、比较运算符

    

 

   注:1)比较运算符的结果一定是一个boolean类型,成立为true,不成立为false;

     2) 比较运算符如果进行多次比较,不能连着写。

      

   6、逻辑运算符·

    逻辑运算符:

      逻辑与  &  两个操作数均为true时,结果才为true

      逻辑或  |     两个操作数均为false时,结果为false

      逻辑非  !  将操作数取反

      简洁与  &&  两个操作数均为true时,结果才为true

      简洁或  ||          两个操作数均为false时,结果为false

      异或      ^     两个操作数同为真或同为假时,结果才为true

      

    

 

 

     

 

 

   注:

    

 

 

   7、三元运算符

    

 

 

   格式:

    

 

 

 

  注:

    

  8、优先级

    从高到低依次为:一元运算符、算术运算符、关系运算符和逻辑运算符、赋值运算符

 

 

 

 

第二章 方法入门

2.1 定义一个方法的格式

  1、格式:

    public static void 方法名称() {  }

    

 

         方法名称的命名规则和变量一样,使用小驼峰式。

    方法体:也就是大括号当中可以包含任意条语句。

   2、注意事项

    1)方法定义的先后顺序无所谓

    2)方法的定义不能产生嵌套包含关系

    3)方法调用好了之后,不会执行的。如果要想执行,一定要进行方法的【调用】。

   3、如何调用方法,格式:

    方法名称();

    

 

              例如:

    

2.2 编译器的两点优化

  注意事项1:

       

 

  注意事项2:

  

 

 

 

 注:布尔类型不能进行数据转换

 

 

第三章   Java语言概述

3.1 Java的特点:

   1、简单易学:Java去掉了C/C++所使用的数据类型:指针(pointer)、联合体(unions)和结构体(structs)

   2、面向对象:面向对象的语言都支持封装、继承和多态三个概念

   3、平台无关性:

         平台无关性有两种:源代码级和目标代码级。Java语言是靠Java虚拟机(JVM)在目标代码级实现平台无关性的。

   4、分布式:

        分布式包括数据分布和操作分布。Java语言支持这两种分布性。

   5、可靠性:

   6、安全性:

   7、支持多线程:

      Java在两方面支持多线程:一方面,Java环境本身就是多线程的,若干系统线程运行,负责必要的无用单元回收、系统维护等系统级操作;另一方面,Java语言内置多线程机制,可以大大简化多线程应用程序开发。

   8、支持网络编程:

        Java语言通过它所提供的类库可以处理tcp/ip,用户可以通过URL地址在网络上很方便地访问其他对象。

   9、编程与解释并存:

       Java语言的编译器并不是把源文件(.Java)编译成二进制码,而是将其编译成一种独立于机器平台的字节码文件(.class文件)。字节码文件可以被Java解释器执行,有解释器将字节码文件再翻译成二进制码,是程序得以运行。

3.2 Java语言规范

   Java语言为开发Java程序而定义了类和接口,称为应用程序接口(API)。

   Java技术包括三个方面:https://wenda.so.com/q/1507788655213951

    1)Java SE(Java Platform Standard Edition):Java平台的标准版,可以用于开发客户端应用程序。应用程序可以独立运行或作为Applet在Web上运行。

     2)Java ME (Java Platform Micro Edition):Java平台的精简版,用于开发移动设备的应用程序。不论是无线通信还是手机、PDA等小型电子装置,均可采用Java ME作为开发工具及应用平台。’;l

    3)Java EE(Java Platform EnterPrise Edition):Java平台的企业版本,用于开发服务器端的应用程序,为企业提供了e-Business架构及其Web服务。其优越的跨平台能力与开放的标准。深受广大企业用户的喜爱。

3.3 Java虚拟机

   1、Java虚拟机的定义:

         Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。JVM其实就是一个字节码解释器。

    2、Java程序的执行过程:先编译,后解释

 

         字节码是Java虚拟机的指令组,和CPU上的微指令码很像,。Java程序编译成字节码文件尺寸较小,便于网络传输。

         字节码最大的好处是可跨平台运行,即Java的字节码可以编写一次,到处运行。

3.4 Java程序的种类和结构

    使用Java语言可以编写两种类型的程序:Application(应用程序)和Applet(小程序)。开发原理相同,但运行环境和计算结构不同。

    一个复杂的程序可以由一个或多个Java源文件构成,每个文件中可以有多个类定义。

     一般的Java源程序文件由三部分组成:1) package语句(0个或1个);

                                                                   2)import语句(0个或多个);

                                                                   3)类定义(1个或多个类定义)。  

           注: 1)package语句表示该程序所属的包。他只能有一个或没有。如果有,必须放在最前面;如果没有,表示本程序属于默认值。

                    2)import语句表示引入其他类库中的类,以便使用。import语句可以有0个或多个,它必须放在类定义的墙面。

                    3)类定义是Java源程序的主要部分,每个文件中可以定义若干类。

                        Java程序中定义类使用关键字class,每个类的定义由类头定义和类体定义两部分组成。

     注:Java是严格区分字母大小写的语言。书写时,大小写不能混析

字节码最大的好处是可跨平台执行,,可让程序“编一次,到处运行”的梦想成真。 

第四章 Java运行流程

4.1 流程控制

4.1.1 顺序结构

    流程图:

         

 

4.1.2 判断语句

    《一》判断语句1----if

      1、格式:

        

 

       2、流程:

        

 

     《二》判断语句2----if......else

      1、格式:

         

 

      2、流程图

         

 

        例如:

          

 

    《三》判断语句3----if...else  if...else

      1、格式

        

 

注:

     2、流程图:

         

4.1.3 选择结构

    《一》选择语句1--switch

       1、格式:

        

 

       2、执行流程:

        1)首先计算出表达式的值;

        2)其次,和case一次比较,一旦有对应的语句,在执行的过程中,遇到break就会结束。

        3)最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

          

 

     3、例如:

      

 

     4、switch语句使用的注意事项:

      1)多个case后面的数值不可以重复。

      2)switch后面的小括号当中只能是下列数据类型:

          基本数据类型:byte/short/char/int

        引用数据类型:String字符串、enum枚举

      3)switch语句格式可以灵活:前后顺序可以颠倒,而且break语句还可以省略。

        “匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。”  

4.1.4 循环语句

    循环结构的基本组成部分,一般可以分成四部分:

     1)初始化语句:再循环开始最初执行,而且只做唯一一次。

     2)条件判断:如果成立,则循环继续;如果不成立,则循环退出。

     3)循环体:重复要做的事情内容,若干行语句。

     4)步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。

    《一》循环语句1--for

      1、格式:

        

 

         ①初始化表达式:

         ②布尔表达式:

        ③循环体:

        ④步进表达式:

       2、流程图

         

 

     《二》循环语句2--while

      while循环有一个标准格式,还有一个扩展格式。

       1、标准格式:

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

        流程图:

            

 

       2、扩展格式:

            

 

      3、for循环和while的区别:可以相互转化

        

 

   《三》循环语句3--   do-while

    1、标准格式:

      

 

     2、扩展结构

      

 

     3、流程图

        

 

4.1.5 三种循环的区别:

      1)如果条件判断从来没有满足过,那么for循环和while循环将执行0次,do-while将会执行一次。

      2)for循环的变量在小括号内当中定义,只有循环内部才可以使用,while和do-while循环初始化语句本来就在外边,所以出来循环之后还可以继续使用。

4.1.6 条件控制语句:

      1、break关键字的用法有常见的两种:

        1)可以用在switch语句当中,一旦执行,整个switch语句立刻结束。

        2)还可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。

      2、另一种循环控制语句是continue关键字。

        一旦执行,立刻跳过当前次·循环剩余内容,马上可以下一次循环

4.1.7 死循环

      永远停不下来的循环,叫做死循环。

      死循环的标准格式:

        while(true){  循环体}

4.2 快捷键

      

第五章 方法

5.1 方法的定义:

  方法其实就是若干语句的功能集合。

5.2 定义方法的完整格式:

  修饰符  返回值类型   方法名称(参数类型   参数名称,...)

  {

    方法体;

    return  返回值;

  }

 其中:

  修饰符:现阶段的固定写法,public static

  返回值类型:也就是方法最终产生的数据结果是什么类型

  方法名称:方法的名字,规则和变量一样,小驼峰式。

   参数类型:进入方法的数据是什么类型

  参数名称:进入方法的数据对应的数据名称

    备注:参数如果有多个,使用逗号进行分隔

  方法体:方法需要做的事情,若干行代码

  return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处

    返回值:也就是方法执行后最终产生的数据结果

    注意:return后面的“返回值”,必须和方法名称后面的“返回值类型”保持对应

    例如:

      定义一个两个int数字相加的方法,三要素:

        1)返回值类型:int

        2)方法名称:sum

        3)参数列表:int   a,int  b

5.3 方法的三种调用格式:

  1、单独调用:方法名称(参数);

  2、打印调用:System.out.println(方法名称(参数));

  3、赋值调用:数据类型 变量名称  =  方法名称(参数);

注意:返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或者赋值调用。

    

 

 

     

 

  赋值调用的方法:

    

 

5.4 方法参数

  ·1、方法有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。

    例如:两个数字相加,必须知道两个数字各是多少,才能相加。

    

 

 

 

  2、方法有参数:小括号当中留空。一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。

    例如:定义一个方法,打印固定10次HelloWorld。

 

 

    

 

     

注意事项:

  对于有返回值的方法,可以使用单独调用、打印调用或者赋值调用

  但是对于无法使你会值得方法,只能使用单独调用,不能使用打印调用或者赋值调用。

  

练习题

1、判断两个数据是否相同

  

 

## 5.5 方法的注意事项

  1、方法应该定义在类当中,但是不能再方法当中再定义方法。不能嵌套。

  2、方法定义的先后顺序无所谓。

  3、方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。

  4、如果方法有返回值,那么必须写上“return  返回值;”不能没有。

  5、return后面的返回值数据,必须和方法的返回值类型对应起来。

    

 

 

  6、对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。

    

 

 

  7、duiyuvoid方法当中最后一行的return可以省略不写。

    

 

 

  8、一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行,两个return不能连写。

    

 

5.6 方法重载的基本使用

  对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。

  方法重载(overload),多个方法的名称一样,但是参数列表不一样。

  好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

        

 

   2、方法重载与下列因素相关:

    1)参数个数不同

    2)参数类型不同

      

 

 

    3)参数的多类型顺序不同

    

 

 

  3、方法重载与下列因素无关

    1)与参数的名称无关

    

 

 

    2)与方法的返回值类型无关

      

 

第六章 数组

 

6.1 数组的定义:

  数组是一种容器,可以同时存放多个数据值。

6.2 数组的特点:

  1、数组是一种引用数据类型

  2、数组当中的多个数据,类型必须统一

  3、数组的长度在成序运行期间不可改变

6.3 数组的使用

   1、创建数组的动作叫数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。

  2、常见的两种初始化方式:

    1)动态初始化(指定长度):在创建数组时,直接指定数组当中的数组元素个数。

    2)静态初始化(指定内容):在创建数组时,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。

   3、动态初始化

      1)动态初始化数组的格式:

        数据类型[ ]  数组名称   =   new 数据类型[数组长度];

      2)含义解析:

        左侧的数据类型:也就是数组当中保存的数据,全都是统一的什么类型

        左侧的中括号:代表一个数组

        左侧的数组名称:给数组取一个名字

        右侧的new:代表创建数组的动作

        右侧的数据类型:必须和左侧的数据类型保持一致

        右侧中括号当中的长度:也就是数组当中到底可以保存多少数据,是一个int数字

       4、静态初始化德

        1)基本格式:

          数据类型[ ]  数组名称  =  new  数据类型[  ]  {元素1,元素2,. . .};

        2)注意事项:虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。

        3)省略格式

          数据类型[ ]  数组名称  =   {元素1,元素2,. . .};

        4)注意事项

          ①静态初始化煤油直接指定长度,但仍然会自动推算得到长度

          ②静态初始化标准格式可以拆分称为两个步骤

          ③动态初始化也可以拆分成为两个步骤

          ④静态初始化一旦使用省略格式就不能拆分成两个步骤了

            

 

 

        5)使用建议

          如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。

6.4 数组元素的获取

  1、直接打印的数组名称,得到的是数组对应的:内存地址哈希值

    

 

   2、访问数组元素的格式:数组名称[索引值]

    索引值:就是一个int数字,代表数组当中元素的编码

    【注意】索引值从0开始,一直到”数组的长度-1“为止

    

 

   3、使用动态初始化数组时,其中的元素将会自动拥有一个默认值。规则如下:

    如果是整数类型,那么默认值为0;

    如果时浮点类型,那么默认值为0.0;

    如果是字符类型,那么默认值为‘\u0000’;

    如果是布尔类型,那么默认值为false;

    如果是英语类型,那么默认类型为null。

  4、注意事项

    静态初始化其实也有默认值得过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数据。

6.5 Java中内存的划分(5个部分)

  1、栈(Stack):存放的都是方法中的局部变量。方法的运行一定在站当中运行。

      局部变量:方法的参数,或者是方法{ }内部的变量

      作用域:一旦超出作用域,立刻从栈内存当中消失。

  2、堆(Heap):凡是new出来的东西,都在对当中。

      堆内存里的东西都有一个地址值:16进制

      堆内存里面的数据,都有默认值。

        如果是整数类型,那么默认值为0;

        如果时浮点类型,那么默认值为0.0;

        如果是字符类型,那么默认值为‘\u0000’;

        如果是布尔类型,那么默认值为false;

        如果是英语类型,那么默认类型为null。

  3、方法区(Method Area):存放.class相关信息,包含方法的信息。

  4、本地方法栈(Native Method Stack):与操作系统相关。

  5、寄存器(pc Register):与CPU相关。

6.6 一个数组的内存圈

  

 0x是16进制的前缀。

6.7 两个数组的内存圈

  要运行必须将方法区当中的内容加载到内存当中,并为他开辟一块内存空间。

 

 

6.8 两个应用指向同一个数组的内存圈

  

 

6.9 常见问题

  数组的索引编号从0开始,一直到“数组长度-1”为止。

  1、数组索引越界异常

    

 

 

    如果访问数组元素的时候,索引编号并不存在,那么将会发生:数组索引越界异常(ArrayIndexOutOfBoundsException)

    原因:缩引编号在写错了

    解决办法:修改成为存在的真确索引编号。

  2、空指针异常

    

 

     所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。

    数组必须进行new初始化才能使用其中的元素。

    如果只是赋值了一个null,没有进行new创建,那么将会发生:

    空指针异常:NullPointerException

    原因:忘了new

    解决办法:补上new

6.10 获取数组的方法

  获取数组长度的方法:数组名称.length

  将会得到一个int数字,代表数组的长度,

  数组一旦创建,程序运行期间,长度不可改变。

    

 

                                                           

6.11 数组的遍历

  遍历数组:说的是对数组当中的每一个元素进行逐一、挨个儿处理。默认的处理方式是打印输出

6.12 数组元素的反转

    1、数组元素反转,其实就是对称位置的元素交换。

    2、通常遍历数组用的是一个索引:

      int i=0;

      现在表示对称位置需要两个索引:

      int   min=0;

      int   max=array.length-1;

    3、如何交换两个变量值?

      int  a=10;

      int  b=20;

      如果是两个水杯,都是满的,如何交换?借助第三个杯子。

      int  temp=a;

      a=b;

      b=temp;

      用三个变量倒手。

            

 

     4、什么时候停止

      1)min==max;

      2)min>max;这两个可以推出min<max时开始交换。

      题目:将数组中的元素依次互换位置,使其变为{50,40,300,20,10}。

      

 

      

 

6.13 基本数据类型和引用数据类型的区别:

  1、所有的变量都存储在栈内存

   2、变量空间可以存储基本数据类型,也可以存储引用数据类型

  3、如果变量空间存储的是基本数据类型,则存储的是值,一个变量的值改变,另一个不会跟着改变

  4、如果变量空间存储的是引用数据类型,则存储的是引用(地址),一个变量地址对应的值改变,另一个也跟着改变。

6.14 习题

  1、给定两个数组a{1,2,3,4},b{5,6,7,8,),将两个数组内的元素对应位置互换。

    

 

 加入两个数组的长度互不相同时,可以直接交换变量a和b中数组引用(地址),没有循环,一次就搞定了,不受长度的限制。

    

 

 

当两个数组的长度相同时,可直接用for循环交换数组中对应的元素(循环好多次,受长度的限制)。

    

 

 ·2、给定两个数组a{1,2,3},b{4,5}合并两个数组(方法:创建一个新的数组)

   思路一:分别将a和b数组中的元素存入新数组内。       

 

     思路二:想要将新数组填满。

    

 

  3、给定一个数组a{1,2,3,0,0,4,5,0,6,0,7}去掉数组中的0元素(创建一个新数组,短的,非零元素挑出来。

    

 

 

 

 

    

 

   4、创建一个数组,存储2到100之间的素数(质数)

    思路一:空间占用小,执行效率慢

        0、通过一个几千次的循环寻找一个---count

        1、创建一个数组,长度(刚好,没有一个空间多余)

        2、通过一个几千次的循环找寻素质,将素数存入数组内

 

     

     思路二:执行效率高,空间占用大

        0、创建一个足够长的数组

        1、通过几千次的循环找素数,将素数存入数组内

        2、将存入素数的数组,后面部分0元素去掉

    

 

 

 

     5、数组元素的排序(冒泡 选择)

      数组元素的排序本质是交换位置(交换位置的条件)

      1》冒泡排序法(升序----数组底端冒出一个泡【最小值】)

       

 

 

     执行结果:

      

 

 

    

 

   6、用户登录认证(用数组当作小数据库  存值  用户验证)

    用户登录认证的步骤:

      

 

 

十五、二维数组

 1、 二维数组的静态初始化:

 方法一:

 

    

 

     方法二:

        

 

     增强for循环:

       

 

     执行结果:

        

 

   2、二维数组的动态初始化:

 

posted @ 2020-07-05 11:18  空岛迷梦  阅读(506)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css