Java的学习主要分三个阶段,第一个阶段Java基础的学习,第二个阶段Java web技术的学习,第三个阶段企业框架的学习。相比于PHP开发,Java更适合开发一些大型的商业应用系统,因为其安全性和可维护性更高,当然成本也相对较高。另外Java开发主要有web方向和安卓方向,我学习的是Web方向,总结的当然不会有安卓的内容,不过它们核心都在Java基础。
一、了解Java
1、java语言的三种技术架构
J2EE/JavaEE:企业版
是为开发企业环境下的应用程序提供的一套解决方案。
该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发。
J2SE/JavaSE:标准版
是为开发普通桌面和商务应用程序提供的解决方案。
该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。比如Java版的扫雷。
J2ME/JavaME:小型版
是为开发电子消费产品和嵌入式设备提供的解决方案。
该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。
2、JVM、JRE和JDK的区别:
JVM(Java Virtual Machine):Java虚拟机,用于保证Java的跨平台的特性。注意:Java语言是跨平台,Jvm不是跨平台的,不同的系统平台需要安装不同的JRE。 跨平台核心:JVM
JRE(Java Runtime Environment):Java的运行环境,包括jvm+java的核心类库。
JDK(Java Development Kit):Java的开发工具包,包括jre+开发工具
3、环境变量的配置
Java1.5版本以后无需设置classpath,所以一般设置Path路径就可以了。
Path路径:是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录。
在计算机系统属性-高级系统设置-环境变量下 配置:
JAVA_HOME 盘符:\Program Files\Java\jdk版本号
Path %JAVA_HOME%\bin; 在最前面添加,注意不能少分号
4、开发Java程序的步骤:
编码(生成.java的源文件)–编译(生成.class的字节码文件)–执行
二、数据类型与运算符
1、变量的作用
变量的作用:用来存储数据。例子:int money=1000;
为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用
注意:其值不能改变的量用final常量表示,常量必须大写
如:final int NUM=10;
2、变量命名规则:
首字母:字母、下划线、$、¥ 其后可以是: 数字
命名形式:驼峰 使用有意义英文字母
不能使用关键字来自定义命名 比如public class
3、数据类型分类
基本数据类型:使用栈的位置
引用数据类型:引用堆的对象 比如String(是java提供的一个类) 类 数组 接口
8种基本数据类型
整型 byte short int long 浮点型 float double
字符型 char 布尔型 boolean
4、类型转换
精度从高到低 double float long int short(char) byte
自动类型转换:低精度—>高精度,类型兼容
强制类型转换:高精度—>低精度int b=(int)10.3+(int)43.2;
5、运算符基本分类
1、 算数运算符(+ - * / % ++ –)如 :7%4=3 求余运算符; i++相当于 i=i+1; ++i 先计算i自加
2、关系运算符(> >= < <= == !=) ==恒等于 != 不等于 如:num1=(10==20) 输出为假 ,用false表示
3、逻辑运算符(|| && ! ) 或 且 非 关系 或:有一个为真就是真
4、位运算符 ( &按位与、|按位或、^按位异或、~按位非、<<左移、>>右移、>>>无符号右移 ) 位运算操作数为整形数,结果int 或long 二进制运算5&6=0
5、条件运算符(? :) 如: 5<7?5:7 结构是ture,执行表达式1 否则表达式2 取最小值的写法
6、赋值运算符(= a+= a*=) 如:x+=3相当于x=x+3 x*=y+8相当于x*
6、运算符优先级
算术>关系>逻辑
算术运算:乘除优先加减
关系运算符: 从左到右计算 > >= < <= 优先级高于 == !=
逻辑运算符:非>且>或 其中”非“高于乘除 ; 遵循括号优先
単目运算符++ ~ – 三目运算符 ? :
三、流程控制
1、程序结构
- 选择结构:
1、if结构
1、基本if 处理单一或组合条件情况
2、if-else 处理简单条件情况
3、多重if 处理分段条件情况 一定要注意条件顺序!
4、嵌套if 处理复杂条件情况
2、switch:适合多重条件分支,等值条件判断!注意break default
- 循环结构:
1、while循环 处理多次重复执行的条件
while(条件){
操作
循环条件
}
2、do while 循环
do{
循环操作
}while(循环条件);
3、For循环
for(初始化变量;条件判断;更新循环变量){
循环操作
}
- 嵌套循环 允许三种语言嵌套
1、外层循环执行一次 → 内层循环执行全部;
2、内层循环全部执行完→进行外层继续操作
2、循环的跳转
break: 跳出整个循环结构 (用在循环和switch语句)
continue: 跳出本次循环,进入下次循环(用在循环语句中)
return: 直接结束方法
3、程序的调试Debug
设置断点→单步运行→观察变量
四、数组
1、数组定义
占用内存中一串连续的空间,存储相同数据类型的数据。是一个变量,但可以定义多个变量。
如:int[] scores=new int[]{2,34,56举例:,33,2};
2、数组分类
1、一维数组
int[] nums=new int[3];
int rate[4+5]; [数组长度]可以是常量或常量表达式,不能用变量
数组下标:取值范围 0 ~ 数组长度-1
数组初始化:int[] scores={2,3,4,5}或者int[] scores=new int[]{2,34,56,33,534,343,2};
数组长度: scores.length
数组遍历 for(int num:scores){}
2、二维数组——最常见多维数组:
int[][] nums=new int[3][]; 最高维 nums.length=3 注意在使用运算符new来分配内存时,对于二维数组至少要给出最高维的大小
int scores[][]={{90,85,45,64,43},{34,54,45}.{35}} scores[0].length=5
int nums[][]=new int[5][50]; 5栈 50堆
对比C语言:
java语言 数组初始化 int num[][]=new int[5][]; 初始化外层最高维不可省略 ,内层可以省略
c 语言 数组初始化 int num[][2]={{1,2},{3,4},{5,6},{7,8}}; 初始化行数(外层)可以省略,列数(内层)不可以省略。理解为行列相间的表格,通过嵌套循环访问二维数组,其外层循环控制行数,内层循环控制每行数据内容
3、工具类:Arrays类
1、boolean equals (array1,array2) 比较
2、sort(array) 升序
3、String toString(array) []
4、void fill(array,val) 全部赋值为val
5、copyOd(array,length) 数组复制为新长度数组
6、int binarySearch(array,val) 查询元素值val在数组中的位置(下标)
4、常用排序方法
1、插入排序:直接插入排序、希尔排序
2、选择排序:简单选择排序、推排序
3、交换排序:冒泡排序、快速排序 –主要学习内容
4、归并排序
5、基数排序
五、相关代码
- package practice //新建包
- import java.util.Arrays; //导入Arrays类
- import java.util.Scanner; //导入Scanner类
- /**
- * @author Visant E-mail: 1206719539@qq.com
- * @date 2016年5月5日 下午2:31:40
- * @version 1.0
- */
- public class Demo2 {
- public static void main(String[] args) {
- /*//求最大、最小值
- int []a=new int[]{800,4,2,1,-23,344,12,2};
- int max,min;
- max=min=a[0];
- for(int i=1;i<a.length;i++){
- if(max<a[i]) max=a[i];
- if(min>a[i]) min=a[i];
- }
- System.out.println(“max=”+max+”,min=”+min);*/
- /* //二维数组书写形式
- int [][]a = new int[3][];
- a[0]=new int[]{1,2,3};
- a[1]=new int[]{4,5,6,7,8};
- a[2]=new int[]{9,0};
- */
- /*//二维数组遍历
- //初始化二维数组
- int [][]a=new int[][]{{1,2},{3,4,5},{6,7}};
- for(int i=0;i<a.length;i++){//外层控制进行几次内层循环
- for(int j=0;j<a[i].length;j++){
- System.out.print(a[i][j]+” ”);//内层控制输出遍历的每个数字
- }
- System.out.println();
- }*/
- /*//初始化二维数组
- int [][]array=new int[][]{{80,66},{70,54,98},{77,59}};
- int total;//保存成绩
- for (int i = 0; i < array.length; i++) {//外层班级循环
- String str=(i+1)+”班”;//定义班级变量
- total = 0;//每次循环到此都归为0
- for (int j = 0; j < array[i].length; j++) {//内层成绩循环相加
- total += array[i][j];//成绩相加
- }
- System.out.println(str+”总成绩:”+total);
- }*/
- }
- }
- public class Demo1 {
- public static void main(String[] args) {
- /*Arrays类操作数组:
- * 主要学习equals()、sort()、binarySearch()方法
- * */
- /* //equals()方法
- int []arr1={10,50,40,30};
- int []arr2={10,50,40,30};
- int []arr3={60,50,85};
- System.out.println(Arrays.equals(arr1,arr2));//判断arr1,arr2长度与元素是否相等
- System.out.println(Arrays.equals(arr1,arr3));//判断arr1,arr3长度与元素是否相等
- //sort()方法排序
- int []a=new int[]{1,3,5,2,8,6};
- Arrays.sort(a);//升序排列
- System.out.println(“\n升序排列结果:”);
- for(int obj:a){
- System.out.print(obj+” ”);}
- //binarySearch()方法
- int []arr={10,50,40,30};
- Arrays.sort(arr);//升序排列
- int index=Arrays.binarySearch(arr, 30);//查找30元素所在的位置-下标
- System.out.println(index);
- index=Arrays.binarySearch(arr, 50);//查找50元素所在的位置-下标
- System.out.println(index);*/
- /*常用排序方法:http://blog.csdn.net/pzhtpf/article/details/7559896
- * 1、插入排序:直接插入排序、希尔排序
- * 2、选择排序:简单选择排序、推排序
- * 3、交换排序:冒泡排序、快速排序
- * 4、归并排序
- * 5、基数排序
- * 主要学习:快速选择排序、冒泡排序*/
- /*
- //冒泡降序排列 嵌套循环实现!
- int[] nums={8,46,100,2,0};
- for(int i=0;i<nums.length-1;i++){//i+j=nums.length-1 外层轮数与内层循环次数总和
- for(int j=0;j<nums.length-1-i;j++){
- if(nums[j]<nums[j+1]){
- //交换数据
- int temp=nums[j];
- nums[j]=nums[j+1];
- nums[j+1]=temp;
- }
- }
- }
- //输出结果
- System.out.println(“降序排列结果”);
- for(int num:nums){
- System.out.print(num+”\t”);
- }*/
- //冒泡升序排列
- int []a=new int[]{1,3,5,2,8,6};
- for(int i=0;i<a.length-1;i++){//总共进行几轮
- for(int j=0;j<a.length-1-i;j++){//每轮交换次数 int j=i;j<a.length-1;j++
- if(a[j]>a[j+1]){
- //交换数据
- int temp=a[j];
- a[j]=a[j+1];
- a[j+1]=temp;
- }
- }
- }
- System.out.println(“\n升序排列结果:”);
- for(int obj:a){
- System.out.print(obj+“ ”);
- }
- /*
- //类方法升序排序
- int []a=new int[]{1,3,5,2,8,6};
- Arrays.sort(a);
- System.out.println(“\n升序排列结果:”);
- for(int obj:a){
- System.out.print(obj+” ”);}
- //类方法降序排列
- int []a=new int[]{1,3,5,2,8,6};
- Arrays.sort(a);
- for(int i=0,j=a.length-1;i<j;i++,j–){
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
- System.out.println(“\n降序排列结果:”);
- for(int obj:a){
- System.out.print(obj+” ”);}*/
- /*
- //数组添加: 定位。 index==-1插入在最后, index==a,进行倒序移动,前值给后值。输出结果
- int []a=new int[6];//在堆中开辟6个空间
- //接受5个数字的输入,并显示输入结果
- System.out.println(“请输入5个升序排列的整数:”);
- Scanner input = new Scanner(System.in);
- for(int i=0;i<a.length-1;i++){//注意这里是a.length-1!也就是进行5次循环输入
- a[i]=input.nextInt();
- }
- System.out.println(“********插入前**********”);
- for(int i=0;i<a.length-1;i++){
- System.out.print(a[i]+” ”);
- }
- //进行插入操作
- System.out.println(“\n请输入要插入的元素:”);
- int num=input.nextInt();
- //比较大小进行定位
- int index=-1;//定义插入数组的位置变量
- for(int i=0;i<a.length;i++){//进行6次循环比较
- if(num<=a[i]){
- index=i;//如果插入数字小于某个数字,则其位置给a[index]
- break;
- }//否则index值不变
- }
- //显示插入后结果
- if(index==-1){//插入在最后
- a[a.length-1]=num;
- }else{
- //确定插入,则其他数字后移
- for(int i=a.length-2;i>=index;i–){
- a[i+1]=a[i];//倒序移动,前值给后值
- }
- a[index]=num;
- }
- System.out.println(“******插入后*************”);
- for(int obj:a){
- System.out.print(obj+” ”);
- }
- //数组修改
- int indexNew=-1;
- System.out.println(“\n请输入要修改的元素:”);//提示修改
- num=input.nextInt();
- for(int i=0;i<a.length;i++){
- if(num==a[i]){
- indexNew=i;//找到了要修改的数字
- break;
- }
- }
- if(indexNew!=-1){ //找到了要修改的
- System.out.println(“请输入要修改为:”);
- num=input.nextInt();
- a[indexNew]=num;
- System.out.println(“*********修改后************”);
- for(int i=0;i<a.length;i++){
- System.out.print(a[i]+” ”);
- }
- }else{
- System.out.println(“没有找到要修改的元素”);
- System.out.println(“*********修改后************”);
- for(int i=0;i<a.length;i++){
- System.out.print(a[i]+” ”);
- }
- }
- //数组删除: 定位 。 index==-1没有找到无法删除, index==a,进行正序移动,后值给前值。输出结果
- System.out.println(“\n请输入要删除的元素:”);//提示删除
- num=input.nextInt();
- //比较定位
- index=-1;
- for(int i=0;i<a.length;i++){
- if(num==a[i]){
- index=i;//如果找到要删除数字,则其位置给啊a[index]
- break;
- }
- }
- //进行删除前移操作
- if(index!=-1){ //不是-1,就是找到了要删除的
- for(int i=index;i<a.length-1;i++){
- a[i]=a[i+1];//正序移动,后值给前值
- }
- System.out.println(“*********删除后************”);
- for(int i=0;i<a.length-1;i++){
- System.out.print(a[i]+” ”);
- }
- }else{
- System.out.println(“没有找到要删除的元素”);
- System.out.println(“*********删除后************”);
- for(int i=0;i<a.length;i++){
- System.out.print(a[i]+” ”);
- }
- }*/
- /*
- //遍历数组
- int scores[]=new int[5];
- Scanner input=new Scanner(System.in);
- System.out.println(“请输入5个整数”); //循环遍历输入5个数
- for(int i=0;i<scores.length;i++){
- scores[i]=input.nextInt();
- }
- System.out.println(“输入的数字为:”);//显示输入结果
- for(int i=0;i<scores.length;i++){
- System.out.print(scores[i]+” ”);
- }*/
- /*
- //增强for循环
- int scores[]={75,67,90,100,0};
- for(int i:scores){
- System.out.println(“数组元素依次为:”+i);
- }*/
- }
- }