黑马程序员--java基础语法

来源:互联网 发布:linux cp 命令用法 编辑:程序博客网 时间:2024/05/01 10:48

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

第一节--java概述

1java的三种技术架构

JavaEE:开发企业环境下的应用程序,主要针对Web程序开发

JavaSE:开发桌面应用程序,是其他两种技术的基础

JavaME:开发电子消费产品和嵌入式设备应用程序,如手机中的程序

2java的开发环境

JDKjava开发工具包,包括JREjava开发工具(javac.exejava.exe等)

JREjava运行时环境,包括JVMjava语言的核心类库

JVMjava虚拟机。java程序不是直接运行在系统平台,而是运行在虚拟机上,在不同的系统上安装相应的java虚拟机就可以运行java程序,这也算java跨平台的原理。

配置环境变量

java相关的环境变量有两个:pathclasspath

path:告诉系统要执行的可执行文件的位置。当要执行一个系统可执行文件时,系统会在当前目录下查找该文件并执行,如果没找到,就会到path变量配置的路径下去查找并执行。

classpath:告诉java虚拟机要执行的类文件的位置。当让java虚拟机执行一个类文件时,java虚拟机默认在当前目录下查找类文件并执行,如果配置了classpath变量,那么java虚拟机会直接到classpath变量配置的路径下去查找,如果classpath变量后加了分号,没找到的话会到当前目录下再查找,没加分号则不会。一般不加分号,这样在指定目录下没找到的话就报错,就可以调试程序。

3、编译和运行

java源码编写完成后,生成的.java文件不能被JVM执行,需要编译成被JVM识别的.class文件,编译过程由javac.exe完成

JVM执行.class文件由java.exe完成

第二节--java语法基础

1、关键字和标示符

关键字就是java语言中被赋予了特殊意义的单词

标示符就是用来起名字的符号。自定义标示符的规则:

由字母、数字或下划线组成,数字不能开头,不能使用关键字

2、常量:就是不会变化的数据

整数常量,字符常量,布尔常量,浮点型常量,null常量

3、变量

变量就是内存中的一个存储空间,用于存储常量数据。

变量定义格式:数据类型 变量名 数据

数据类型

基本数据类型:整数型(byteshortintlong)浮点型(floatdouble)字符型(char)布尔型(boolean

引用数据类型:数组、类、接口

基本数据类型的级别:bytecharshort-->int-->long-->float-->double

自动类型转换:从级别低的类型转换成级别高的类型,系统自动转换

强制类型转换:从级别高的类型转换成级别低的类型,需要强制转换

4、运算符

算数运算符:+  -  *  /  %  ++  --

x++++xx = x + 1的简写形式。++在前,x先自增后参与运算,++在后,先参与运算在自增。自减--同理

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

比较运算符:==  > <  >=  <=  instanceof

逻辑运算符:|  ||  &  &&  !  ^

除了!其他逻辑运算符两边都是boolean表达式。

和 || 的区别:运算结果相同,对于||,如果第一个表达式结果是true,那么就不会执行第二个表达式。

&&&的区别:运算结果相同,对于&&,如果第一个表达式结果是false,那么就不会执行第二个表达式。

^异或:两边表达式结果相同为false,结果不同为true

位运算符:用于操作二进制位的运算:| &  ^  ~  <<  >>  >>>

5、语句

 

(1)、判断语句:if 语句

class IfDemo {public static void main(String[] args) {int x = 1;if (x > 1) {System.out.println("yes");}else {System.out.println("a");}/* * if else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2; * 三元运算符: * 好处:可以简化if else代码。 * 弊端:因为是一个运算符,所以运算完必须要有一个结果。 */int a = 9, b;b = (a > 1) ? 100 : 200;if (a > 1)b = 100;elseb = 200;int n = 3;if (n > 1)System.out.println("a");else if (n > 2)System.out.println("b");else if (n > 3)System.out.println("c");elseSystem.out.println("d");/* * if(n>1) System.out.println("a"); if(n>2) System.out.println("b"); * if(n>3) System.out.println("c"); else System.out.println("d"); */System.out.println("over");}}

(2)、选择语句:switch语句

class SwitchDemo {public static void main(String[] args) {int a = 4, b = 2;char ch = '+';switch (ch) {case '-':System.out.println(a - b);break;case '+':System.out.println(a + b);break;case '*':System.out.println(a * b);break;case '/':System.out.println(a / b);break;default:System.out.println("非法");}System.out.println("Hello World!");}}


注意:switch语句接收的变量类型仅限于bytecharshortint

 

(3)、循环语句:for循环语句和(do) while 循环语句

当对某些语句执行多次时就使用循环结构

 

for循环

定义格式:

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

执行语句;

}

while循环

定义格式:

while(循环条件表达式){

执行语句;

}

<pre name="code" class="java">class ForDemo {public static void main(String[] args) {for(int x = 0; x<3 ; x++){System.out.println("x="+x);}//使用while循环int y=0;while(y<3){System.out.println("y="+y);y++;}System.out.println("y===="+y);/*1,变量有自己的作用域。对于for来讲:如果将用于控制循环的增量定义在for语句中。那么该变量只在for语句内有效。for语句执行完毕。该变量在内存中被释放。2,for和while可以进行互换。如果需要定义循环增量。用for更为合适。*/}}


do while循环和while循环的区别:前者先执行循环体后判断循环条件,后者先判断循环条件后执行循环体。也就是说,无论是否满足循环条件,do while 都会执行一次循环体。

 

break 和 continue

break用于switch语句和循环语句,用于循环语句时结束当前循环,当循环嵌套时,只能跳出当前循环,如果想跳出外层循环,可以给循环起名字,即标号。

continue只用于循环语句,结束本次循环继续下次循环。

注意:当breakcontinue单独存在时,后面不可以定义语句,因为执行不到。

 

6、函数

函数的定义

函数就是定义在类中有特定功能的一段小程序。

 

函数的格式:

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

执行语句;

return 返回值;

}

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

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

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

实际参数:调用函数时传递给函数的具体的值

return语句:用来结束函数

返回值:函数运行后返回给调用者的结果

 

函数的特点

a、函数对功能代码进行了封装

b、函数提高了功能的复用性

c、函数提高了代码的复用性

d、函数只有被调用时才会执行

e、函数中可以调用函数,不能定义函数

 

如何定义函数

两个明确:明确函数运行的结果

  明确参与运算的未知内容

练习:定义函数

<pre name="code" class="java">//需求:定义一个功能,求任意整数乘以9的值//明确:运行函数的结果是一个积,有一个未知整数参与运算class Test{public static void main(String [] args){sop(getSum(9));}//返回值类型为intpublic static int getSum(int x){int sum = x * 9;return sum;}public static void sop(Object obj){System.out.println(obj);}}


函数的重载

java允许一个类中存在多个同名函数,但函数的参数列表必须不同

参数列表不同,是指参数类型或者参数个数,注意参数列表时有顺序的,不同类型的参数顺序不同参数列表就不同,与返回值类型无关。

 

7、数组

数组是一种用于存储同一类型数据的容器,可以对容器中的数据进行编号,从0开始。数组用于封装数据,是一个实体。

数组的定义形式有两种:

(1)、动态初始化:元素类型 [] 变量名 = new 元素类型[元素个数];

如:int [] arr = new int [10];

(2)、静态初始化:元素类型 [] 变量名 = {元素1,元素2,……};或

元素类型 [] 变量名 = new元素类型[]{元素1,元素2,……}

如:int [] arr = {1,2,3,3,4};int [] arr = new int []{1,2,3,3,4};

数组的应用:

(1)、选择排序和冒泡排序

<pre name="code" class="java">public class ArraySort {public static void main(String[] args) {int[]array ={3,4,1,7,0,9,5,8,2,6};print(array);bulSort(array);print(array);}public static void print(int[] arr){System.out.print('[');for(int x = 0;x < arr.length;x++){if(x!=arr.length-1)System.out.print(arr[x]+',');elseSystem.out.print(arr[x]+"]");}System.out.println();}/*选择排序 * 思路:将数组0脚标元素和数组中其他元素依次比较,将较小的元素放到0脚标位置 * 比较结束后,0脚标元素为数组最小值元素。继续将1脚标元素和其余元素比较, * 以此类推。 * */public static void selectSort(int[] arr){//外层循环遍历数组元素for(int x = 0;x < arr.length-1;x++){//内存循环比较元素大小for(int y = x+1;y < arr.length;y++){//如果元素arr[x]比元素arr[y]大,那么交换两者位置if(arr[x] >arr[y]){int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}}}/*冒泡排序 * 思路:从0脚标元素开始,相邻的两个元素依次比较,如果前一个元素比后一个元素大,则两者交换位置,比较结束后, * 末尾元素则是最大值元素。再从0脚标元素开始比较,以此类推。 * */public static void bulSort(int[] arr){//外循环遍历数组for(int x = 0;x < arr.length;x++){//内循环比较元素大小for(int y = 0;y < arr.length-x-1;y++){//外循环计数变量x控制内循环比较的次数if(arr[y] > arr[y+1]){int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;}}}}public static void swap(int[]arr,int x,int y){}}


(2)、折半查找

/*查找一个数在数组中的位置时,可以通过遍历数组元素,与这个数比较进行查找。 * 为了提高效率,可以将这个数key和数组中间位置元素arr[mid]比较,若这个数大于中间元素值,则 * min=mid+1,mid=(min+max)/2,再将key与新中间位置元素arr[mid]比较,以此类推。 * 若这个数key小于arr[mid],则max=mid-1,mid=(min+max)/2,以此类推。 * 若数组中不存在这个元素,则返回-1; * */public class HalfSearch {public static void main(String[] args) {int[]arr={2,4,6,8,9};int key = 21;System.out.println(halfSearch(arr, key));}//定义一个折半查找的方法public static int halfSearch(int[]arr,int key) {int min = 0,max = arr.length-1,mid;while(min <= max){mid = (min + max)/2;if(key>arr[mid])min = mid + 1;else if(key < arr[mid])max = mid - 1;elsereturn mid;}return -1;}}

0 0