---------------------- 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中不可以写成3
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为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; } }