黑马程序员_Java编程基础

---------------------- android培训 、 java培训 、 期待与您交流! ----------------------

一、基础知识:

1.软件开发:

软件:一系列按照特定顺序组织的计算机数据和指令的集合

常见的系统软件:DOS(磁盘操作系统)、windows、Linux

常见的应用软件:扫雷、迅雷、QQ等

开发:制作软件

 

2.人机交互:

交互方式:①图形化界面(GUI,Graphical User Interface),这种方式简单直观易操作

          ②命令行方式(CLI,Command Line Interface),需要一个控制台,并输入特定指令让计算机完成操作,这种方式较为麻烦,需要记住一些指令

dos命令行中常见的命令:

dir : 列出当前目录下的文件以及文件夹  md : 创建目录

rd : 删除目录                         cd : 进入指定目录

cd.. : 退回到上一级目录                cd\: 退回到根目录

del : 删除文件                        exit : 退出dos命令行

注:删除同类文件,用通配符“*”,如:del *.txt

 

3.计算机语言:

计算机语言:人与计算机交流的方式(通过DOS命令行演示计算机可以识别的内容),计算机语言有很多种,如C,C++,Java等

 

二、Java语言概述:

1.Java语言是SUN(Stanford University Network,斯坦福大学网络公司)于1995年推出的一门高级编程语言,它是一种面向Internet的编程语言

 

2.Java语言是一种简单易学,完全面向对象,安全可靠,与平台无关的编程语言。其特点是跨平台性,即通过Java语言编写的应用程序在不同的系统平台上都可以运行(一次编译,到处运行),其原理是只需在需要运行Java应用程序的操作系统上安装一个Java虚拟机(JVM,JavaVirtual Machine)即可,由JVM来负责Java程序在该系统中的运行

 

3.Java语言的三种技术架构:

 J2EE(Java 2 Platform Enterprise Edition)企业版,主要针对于互联网应用程序开发

 J2SE(Java 2 Platform Standard Edition)标准版,可以完成桌面应用程序的开发

 J2ME(Java 2 Platform Micro Edition)小型版,主要用于小型电子消费类产品如手机中的应用程序的开发

 注:Java5.0版本后,更名为 JAVAEE  JAVASE  JAVAME

 

三、Java语言环境搭建:

1. JRE(JavaRuntime Environment  Java运行环境)包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可;

 JDK(Java Development Kit  Java开发工具包)JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。

其中的开发工具:编译工具(javac.exe)  打包工具(jar.exe)等

 简单而言:使用JDK开发完成的java程序,交给JRE去运行

 

2.配置环境变量:

①出现的问题:在dos命令行中敲入javac,会出现错误提示:javac不是内部或外部命令,也不是可运行的程序或批处理文件,错误原理:当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找。如果还没有找到,就出现以上的错误提示,此时需要进入到jdk的安装目录下运行javac才可用,但是考虑到每次都要进入会很麻烦,可不可以在任何目录下都可以执行java的工具呢?

 

②置环境变量的步骤:①我的电脑--属性--高级--环境变量 ②编辑path环境变量,在变量值开始处加上java工具所在目录,后面用“;”和其他值分隔开即可 ③打开DOS命令行,任意目录下敲入javac ④如果出现javac 的参数信息,配置成功 注:这种配置方法,是一劳永逸的,如果想临时使用java工具呢?想到临时配置环境变量

 

③配置环境变量:临时配置是通过DOS命令行中的set命令来完成的,具体如下:

set :用于查看本机的所有环境变量的信息 set 变量名:查看具体一个环境变量的值

set 变量名=:清空一个环境变量的值      set 变量名=具体值:给指定变量定义具体值

在原有环境变量中添加新值得做法:set  path=新值;%path%

 

配置classpath:为了实现在任一目录下都可以执行某一目录下的class文件

格式为:set classpath=c:\ classpath变量值是java类文件的目录

注:虚拟机找寻class文件的顺序:1,classpath2,当前目录,但是如果classpath结尾处没有加分号,不找当前目录。所以建议在配置时结尾处不要加分号,如果需要访问当前目录可以用“.”表示

 

四、Java程序开发体验(Hello World):

程序编译运行步骤:①将Java代码编写到扩展名为.java的文件中 ②通过javac命令对该java文件进行编译  ③通过java命令对生成的class文件进行运行

程序编译用javac.exe(.java文件),程序运行用java.exe(.class文件即字节码文件)

程序代码:

class Demo{

    public static void main(String[] args)

{

   System.out.println(“Hello World”);//注意语法、字母大小写及中英文

}

}

 

五、Java语言基础:

1.关键字:被Java语言赋予了特殊含义的单词,其特点是:关键字中所有字母均为小写

 用于定义数据类型的关键字:byte  short int  long  float  double  char  boolean  class

                         interface  void

 用于定义数据类型值得关键字:true  false null

 用于定义流程控制的关键字:if  else switch  case  default while  do  for break

                          continue return 

用于定义访问权限修饰符的关键字:public  protected private

用于定义类、函数、变量修饰符的关键字:abstract  final static  synchronized

用于定义类与类之间关系的关键字:extends  implements

 用于定义建立实例及引用实例,判断实例的关键字:new  this  super instanceof

 用于异常处理的关键字:try  catch finally  throw  throws

 用于包的关键字:package  import

 其他修饰符关键字:native  strictfp transient  volatile  assert

 

2.标识符:在程序中自定义的名称,由26个英文字母大小写,数字:0-9 符号:_ $ 组成

 合法的标识符定义规则:①数字不可以开头  ②不可以使用关键字

Java中标识符的名称规范:

包名:多单词组成时所有字母都小写如:xxxyyyzzz

类名接口名:多单词组成时,所有单词的首字母大写如:XxxYyyZzz

变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写如:xxxYyyZzz

常量名:所有字母都大写,多单词时每个单词用下划线连接如:XXX_YYY_ZZZ

 

3.注释:用于注解说明解释程序的文字,它可以提高程序阅读性

Java中的注释格式:

单行注释 格式://注释文字

多行注释 格式:/*  注释文字  */

文档注释 格式:/** 注释文字 */

 注:单行注释和多行注释中的文字不会被JVM解释执行,而对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档

 

4.常量:表示不能改变的数值

Java中常量的分类:

整数常量:所有整数

小数常量:所有小数

布尔(boolean)型常量:较为特有,只有两个数值:true  false。

字符常量:将一个数字字母或者符号用单引号(‘’)标识。

字符串常量:将一个或者多个字符用双引号(“”)标识。

null常量:只有一个数值就是:null.

 其中,整数常量的四种表现形式:

二进制:0,1 ,满2进1.     八进制:0-7 ,满8进1. 用0开头表示。

十进制:0-9 ,满10进1.    十六进制:0-9,A-F,满16进1. 用0x开头表示

进制之间可以相互转换,其中负数的二进制表现形式:对应的正数二进制取反加1

 

5.变量:内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)

该区域的数据可以在同一类型范围内不断变化,定义变量的目的是为了不断地存储同一类型的常量,并可以重复使用

 定义变量的格式:数据类型    变量名  =  初始化值;

类型转换:自动类型转换(也叫隐式类型转换)  强制类型转换(也叫显式类型转换)

表达式的数据类型自动提升的几种情况:

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型

 

6.运算符:

①算数运算符:+正号 –负号 +加号 –减号 *乘号 /除号 %取模 ++自增--自减 +字符串相加

算术运算符的注意问题:

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论

对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分

 

②赋值运算符:符号:= , +=, -=, *=, /=, %=

 

③比较运算符:==相等于 !=不等于 >大于 <小于  >=大于等于  <=小于等于

              instanceof检查是否是类的对象

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false

注2:比较运算符“==”不能误写成“=”

 

④逻辑运算符:&与 |或  ^异或  &&逻辑与  ||逻辑或

  逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6

“&”和“&&”的区别:

单&时,左边无论真假,右边都进行运算;

双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算

“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false

 

⑤位运算符:<<左移  >>右移  >>>无符号右移  &与运算 |或运算 ^异或运算 ~反码

 位运算是直接对二级制进行运算

位运算符的细节:

<< 空位补0,被移除的高位丢弃,空缺位补0

>> 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1

>>> 被移位二进制最高位无论是0或者是1,空缺位都用0补

&  二进制位进行&运算,只有1&1时结果是1,否则是0

|   二进制位进行 | 运算,只有0 | 0时结果是0,否则是1

^   相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0

不相同二进制位 ^ 运算结果是1;1^0=1 , 0^1=1

 

⑥三元运算符:

格式:(条件表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2

 

7.程序流程控制:

①判断结构:

if语句三种格式:

if(条件表达式)      if(条件表达式)      if(条件表达式)

{ 执行语句; }        { 执行语句; }       { 执行语句; }

                      else                else if(条件表达式)

                     { 执行语句; }       { 执行语句; }   

                                          else

                                          { 执行语句; }

if语句特点:

   a:每一种格式都是单条语句。

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

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

 

②选择结构:

switch语句               

格式:

switch(表达式)

{

   case 取值1:

       执行语句;

       break;

   case 取值2:

       执行语句;

       break;

   ……

   default:

       执行语句;

       break;

}

switch语句特点:

   a:switch语句选择的类型只有四种:byte,short,int , char。

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

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

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

 

③循环结构:代表语句:while , do while  , for

 while语句格式:           do while语句格式:(其特点是条件无论是否满足,

while(条件表达式)          do                  循环体至少执行一次)

{                          { 

    执行语句;                  执行语句;

}                           }while(条件表达式)

 

for语句格式:

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

{

     执行语句;(循环体)

}

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

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

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

 

④其他流程控制语句:break(跳出),  continue(继续)

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

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

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

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

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

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

 

8.函数:

①函数的定义:函数就是定义在类中的具有特定功能的一段独立小程序,也称为方法

 

②函数的格式:

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)

{

      执行语句;

      return返回值;

}

  注:返回值类型:函数运行后的结果的数据类型

       参数类型:是形式参数的数据类型

       形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数

       实际参数:传递给形式参数的具体数值

      return:用于结束函数

       返回值:该函数运算后的结果,该结果会返回给调用者

 

③函数的特点:a:定义函数可以将功能代码进行封装

b:便于对该功能进行复用

c:函数只有被调用才会被执行

d:函数的出现提高了代码的复用性

e:对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写

注意:

函数中只能调用函数,不可以在函数内部定义函数。

定义函数时,函数的结果应该返回给调用者,交由调用者处理。

 

④函数的应用:

两个明确

明确要定义的功能最后的结果是什么?

明确在定义该功能的过程中,是否需要未知内容参与运算

示例:

需求:定义一个功能,可以实现两个整数的加法运算。

分析:该功能的运算结果是什么?两个数的和,也是一个整数(int)

在实现该功能的过程中是否有未知内容参与运算?加数和被加数是不确定的 (两个参数int,int)

代码:

        int getSum(int x,int y) {

          returnx+y; }

 

⑤函数的重载:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可,这些同名函数的出现就是函数的重载(overload)

  重载的特点:与返回值类型无关,只看参数列表

  重载的好处:方便了阅读,优化了程序设计

  重载示例://返回两个整数的和:

            int add(int x,int y){return x+y;}

//返回三个整数的和:

            int add(int x,int y,int z){returnx+y+z;}

//返回两个小数的和:

            double add(double x,double y){returnx+y;}

 

9.数组:同一种类型数据的集合。其实数组就是一个容器

  ①数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素

 

②数组的格式:

格式一:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

示例:int[] arr = new int[8];

格式二:元素类型[] 数组名 = new 元素类型[]{元素,元素,……};

示例:int[] arr = new int[]{15,32,56,84};

int[] arr = {6,12,35,27};

 

  ③数组操作常见问题:

a:数组脚标越界异常(ArrayIndexOutOfBoundsException)

      示例:int[] arr = new int[2];

System.out.println(arr[3]);//访问到了数组中的不存在的脚标时发生

b:空指针异常(NullPointerException)

  示例:int[] arr = null;

System.out.println(arr[0]);//arr引用没有指向实体,却在操作实体中的元素时

 

④二维数组[][]:

格式一:int[][] arr = new int[4][5];

格式二:int[][] arr = new int[6][];

格式三:int[][] arr = {{5,2,1},{3,4},{0,7,1,2}};

 

  ⑤数组常见操作:

   a:数组的遍历

     int[] arr={34,15,67,22,19,88};

     for(int x=0;x

     {

          System.out.println(“arr[“+x+”]=”+arr[x]+”;”);

     }

   b:获取最值(最大或最小)

     public static int getMax(int[] arr)

     {

        int max=0;

        for(int x=0;x

        {

           if(arr[x]>max)

               max=arr[x];

         }

        return max;

      }

  c:查找数组元素

二分查找(前提必须是被查找的数组是有序的):

public static int getIndex(int[] arr,int key)

    {

        intmin,mid,max;

        min = 0;

        max =arr.length-1;

        mid =(max+min)/2;

        while(arr[mid]!=key)

        {

            if(key>arr[mid])

            {

                min= mid + 1;

            }

            elseif(key

            {

                max= mid - 1;          }

if(min>max)

                return-1;

           mid= (max + min) >> 1;

        }

        return mid;

    }

d:数组排序

  选择排序:

    publicstatic void selectSort(int[] arr)

    {

        for (intx=0; x

        {

            for(inty=x+1; y

            {

                if(arr[x]>arr[y])

                {

                    swap(arr,x,y);

                }

            }

        }

    }

冒泡排序:

    public staticvoid bubbleSort(int[] arr)

    {

        for(intx=0; x

        {

            for(inty=0; y

            {

                if(arr[y]>arr[y+1])

                    swap(arr,y,y+1);

            }

        }

    }

对数组元素进行位置置换:

    public staticvoid swap(int[] arr,int index1,int index2)

    {

        int temp =arr[index1];

        arr[index1]= arr[index2];

        arr[index2]= temp;

    }

}

---------------------- android培训 、 java培训 、 期待与您交流! ----------------------

你可能感兴趣的:(黑马程序员_Java编程基础)