这是我第二次学习基础知识了,第一次学习的时候其实并没有做什么详细的笔记,都是跟着视频敲着代码。当时感觉学的很不错,但是当我今天第二次打开基础部分的时候,发现这部分知识对我来说已经有些生疏了。所以真是应了一句老话“好记性不如烂笔头”。所以我觉得黑马强调的博客总结真的很有必要,一方面可以加深自己的理解和记忆,一方面又可以方便自己日后的复习。所我的第一篇Java学习总结来啦,哈哈! Finghting!
一,Java的环境变量配置:
相信很多新手第一次配置环境变量的时候都是查了好久的度娘。其实我也是,黑~而且在配置完以后可能很多人都不会去想为什么要去配置它呢?
其实原因很简单:
我们在编写完一个Java程序是会用到Javac和java命令进行编译和运行。而我们配置环境变量的目的就是要把jdk的bin目录下的工具(也就是javac等)路径告诉系统,当我们使用者些工具的时候,系统就会根据我们配置的环境变量去找这些工具。这样就可以让这些工具在任意目录下运行。
环境变量的配置:
永久配置方式:JAVA_HOME=%安装路径%\jdk
path=%JAVA_HOME%\bin
我们知道path有很多系统级的变量配置,如果我们JDK的路径发生改变,那么就会修改path中的配置。但是这样做是很不安全的,因为修改的时候很可能会把其他的系统配置改掉。所以我们自己建一个变量把JDK的安装路径%安装路径%jdk这一部分单独拿出来,这样当JDK路径发生改变时,我们只要修改自己设置的JAVA_HOME就可以了,提高了安全性。
临时配置方式:
set path=%path%;d:\java\jdk\bin
环境变量的特点:系统会先去当前路径下查找,如果没有再去path中查找。
二,语法基础
1,关键字:就是java语言中赋予了特殊含义的单词。比如:public(权限修饰符).
保留字:就是目前还没有被赋予特殊含义,但是准备日后要使用的单词。比如;const.
2,标识符:就是程序中自定义的名词。比如:类名,变量名,函数名。包含0-9,$, _,a-z.
小贴士:数字不可以用作开头,不可以使用关键字。
3,常量:就是在何处呢个序中不会变化的数据。
★4,变量:其实就是内存中的一个存储空间用于存储常量。
作用:方便于运算。因为有些数据不确定,所以确定该数据的名词和存储空间。
特点:变量空间可以重复使用。
变量空间的格式:变量类型 变量名=初始化值;
变量的作用域:
成员变量:从定义的位置开始到类的大括号结束,也就是在整个类中有效。
局部变量:从定义的位置开始,到变量所在的大括号结束。
变量的生命周期:
从定义的位置开始在内存中存活,到达它所在的作用域的时候在内存中消失。
5,数据类型:
基本数据类型:byte,short ,char,int float,long,double,boolean.
引用数据类型:类,数组,接口。
基本数据类型级别: byte(8) short(16) char(16) 这三个平级,int(32)-->float(32)-->long(64)-->double(64);
基本数据类型转换:
自动转换:由低级别到高级自动转换。
强制转换: 由高级别到低级别需要强转。
6,运算符号
算数运算符:+ -* / % ++ --.
小贴士:任何整数模2不是0就是1,送一只要改变被模数就可以实现开关运算。
赋值运算符:= += -= *= /= %=
比较运算符:><>=<= 特点:结果是boolean型,不是true就是false.
逻辑运算符:& | ^ ! && ||
&和&&的区别:&两边都进行判断,&&如果左边为false,那么右边不参与运算。
|和||的区别:|两边都进行判断,||如果左边为true,那么右边不参与运算。
位移运算符:& | ^>> << >>>
小贴士:一个数异或同一个数两次,那么不变,还是原数。
7,语句
if switch while do while for
break:用于循环语句和 Switch,用于跳出。当用于循环嵌套时,只会跳出当前循环,如果要跳出指定循环,需要给循环进行标号。
break单独存在时,后面不可以跟其它语句,因为执行不到。
continue:用于循环语句,结束本次循环,继续下一次循环。continue单独存在时,后面不可以跟其它语句因为执行不到。
8,函数
函数的定义:其实我也说不好,我们知道为了提高代码的复用性,可以把代码封装起来定义一个功能,而这个功能在java中的体现之一就是函数,那么函数就是一个功能一个方法。
函数的定义格式;
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2...)
{
执行语句;
return 返回值;}
当函数没有具体返回值时,返回值类型可以用关键字void表示。
如果函数的返回值类型是void时,reurn语句可以不写,系统会自动帮你加上。
return作用:结束功能,结束函数。
如何定义一个函数?
1,首先要明确函数执行完后的结果,也就是在明确函数的返回值类型。
2,在实现该功能的过程中是否有未知内容参与了运算,也就是在明确函数的参数列表(参数类型 参数个数)。
函数的作用:定义功能,提高代码的复用性。
小贴士:函数中只能调用函数,不能定义函数。
主函数:
1,它是程序执行的入口。
2,保证该类的独立运行。
3,它被jvm调用。
函数定义名称的作用:
1,对该功能进行标示,方便调用。
2,明确该函数的功能,提高代码的阅读性。
重载:在一个类中如果出现了两个或者两个以上的同名函数,只要它们的参数个数或者参数类型不同,就可以称之为该函数重载了。
重载只看参数列表,与返回值类型无关。
9,数组
引用数据类型,用于存储同一类型数据的容器,好处在于可以给该容器中的数据进行标号,从0开始。
数组的两种表现形式:
动态:元素类型[] 变量名=new 元素类型[元素个数];
静态:元素类型[] 变量名={元素1,元素2,...}
元素类型[] 变量名=new元素类型{元素1,元素2,...};
二维同理。
数组长度的获取:
int [] arr1={,2,3,4,5,};
int[][] arr2={{1,2,3},{4,5,6},{7,8,9}}
int len1=arr1.length;//这里不要和字符串混淆,length是数组的属性。字符串中是用的length()方法。
int len2=arr2.length;//二维数组的长度。
int len3=arr[0].length;//二维数组中第一个一维数组的长度。
数组的遍历:
for(int x=0;x<arr.length;x++)
{
System.out.println(arr[x]);}//打印数组还有一种就是Arrays中的Arrays.toString(arr1)。二维:Arrays.deepToString(arr2);
}
数组重要的方法:
排序:选择排序,冒泡排序。
Example:选择排序。
import java.util.*;
class PaiXuDemo
{
public static void main(String[] args)
{
int[] arr={8,9,6,7,4,2,3,5,1};
xuanZe(arr);
System.out.println(Arrays.toString(arr));//打印数组。
}
public static void xuanZe(int[] arr)
{
//对数组进行排序。
for(int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)
{
if(arr[x]>arr[y])//如果大于则交换两个元素的位置
swap(arr,x,y);
}
}
}
//定义一个方法用于交换数组中两个元素的位置。
public static void swap(int[] arr,int x,int y)
{
int num=0;
num=arr[x];
arr[x]=arr[y];
arr[y]=num;
}
}
Example:冒泡排序。
import java.util.*;
class PaiXuDemo
{
public static void main(String[] args)
{
int[] arr={8,9,6,7,4,2,3,5,1};
maoPao(arr);
System.out.println(Arrays.toString(arr));//打印数组。
}
public static void maoPao(int[] arr)
{
//对数组进行排序。
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-1-x;y++)
{
if(arr[y]>arr[y+1])//如果大于则交换两个元素的位置
swap(arr,y,y+1);
}
}
}
//定义一个方法用于交换数组中两个元素的位置。
public static void swap(int[] arr,int x,int y)
{
int num=0;
num=arr[x];
arr[x]=arr[y];
arr[y]=num;
}
}
查找:折半查找。
Example:
class HalfSearchDemo
{
public static void main(String[] args)
{
int[] arr={1,2,3,4,5,6,7,8,9,};
int index=halfSearch_1(arr,8);
System.out.println(index);
System.out.println("Hello world");
}
//注释:(1):折半查找
public static int halfSearch(int[] arr,int key)
{
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min=min+1;
else
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
//注释;(2):折半查找;
public static int halfSearch_1(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(min+max)>>1;
if(key>arr[mid])
min=min+1;
else
if(key<arr[mid])
max=min-1;
else
return mid;
}
return -1;
}
//插入位置
public static int halfSearch_2(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(min+max)>>1;
if(key>arr[mid])
min=min+1;
else
if(key<arr[mid])
max=min-1;
else
return mid;
}
return min;
}
}