欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

黑马程序员-----Java基础知识,黑马程序员-----java

来源: javaer 分享于  点击 44472 次 点评:2

黑马程序员-----Java基础知识,黑马程序员-----java



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


1  Java语言概述

* 是SUN公司在1995年推出的一门高级编程语言。

* 是一种面向Internet的编程语言。

* 是简单易学、完全面向对象,安全可靠,与平台无关的编程语言。


1.1  Java语言的三种技术架构

1  J2EE(JAVAEE)企业版

是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如Servlet Jsp 等,主要针对于Web应用程序开发。

2  J2SE(JAVASE)标准版

是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。比如Java版的扫雷。

3  J2ME(JAVAME)小型版

是为开发电子消费产品和嵌入式设备提供的解决方案,该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。

 

1.2  Java语言的特点

1.2.1  跨平台性

通过Java语言编写的应用程序在不同的系统平台上都可以运行。原理是只要在需要运行Java应用程序的操作系统上安装一个Java虚拟机(JVM)即可,由JVM来负责Java程序在该系统中的运行。

1.2.2  面向对象

Java语言提供了类、接口和继承,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之Java语言是一个纯粹的面向对象程序设计语言。

1.2.3  支持多线程

Java语言是支持多线程的,所谓多线程可以简单理解为程序中有多个任务可以并发执行,这样可以在很大程度上提高程序的执行效率。


1.3  Java语言的环境搭建

1.3.1  明确什么是JDK,JRE

JRE(Java运行环境)

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

JDK(Java开发工具包)

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

简单而言,就是由JDK开发的程序交给JRE去运行。

1.3.2  环境变量设置

我的电脑--属性--高级--环境变量--path,把下载好的JDK的bin目录路径拷贝到path里即可,用分号隔开。如 E:\jdk1.8.0_40\bin ;

配置技巧:可以新建一个变量javapath = E:\jdk1.8.0_40,然后path设置为%javapath%\bin;在DOS命令行中输入javac,如果出现关于Java的信息则说明配置成功;

临时配置:可以在DOS命令行中输入 set path = E:\jdk1.8.0_40\bin 。

1.3.3  classpath设置

如果想要不进入目录直接运行程序,可以配置classpath,新建变量classpath,设置为程序所在的目录路径即可,也可以临时配置 set classpath = 路径 。


2  Java语言基础组成

2.1  关键字

定义:被Java语言赋予了特殊含义的单词

特点:关键字中所有字母都小写


2.2  标识符

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

规则:数字不可以开头;不可以使用关键字

注意:Java中严格区分大小写,在起名字时,尽量有意义

Java中的名称规范:

1.包名:xxyyzz

2.类名,接口名:XxYyZz

3.变量名和函数名:xxYyZz

4.常量名XX_YY_ZZ


2.3  常量与变量

2.3.1  常量

常量的分类:整数常量、小数常量、布尔型常量(true false)、字符常量(单引号标识)、字符串常量(双引号标识)、null常量(只有一个数值就是null)

对于整数,Java有四种进制:二进制、十进制、八进制(0开头)、十六进制(0x开头)

心得:进制的转化,高进制转低进制,对于高进制转x进制来说,只需不断的除以x,最后把每次相除所得的余数相连即可。低进制转高进制,对于低进制转x进制来说,把每位对应的数乘以x的n次方(n为位数),最后相加即可。

特殊:负数的二进制表现为所有位取反并加1,比如6=110,-6其实就是6的内存中的(32位)二进制取反+1,就是1111-1111 1111-1111 1111-1111 1111-1010。负数若想转为正数,只需先减一再所有位取反。注意负数的最高位都是1。


2.3.2  变量

概念:变量是内存中的一个存储区域,该区域有着自己的名称(变量名)和类型(数据类型),且可以在同一类型的范围内不断变化。

注意:变量的作用范围(在{}内有效),格式是 数据类型 变量名 = 初始化值。


2.4  运算符

2.4.1  算术运算符


注意:字符串和任何数据使用“+”都是相连接,最后都会变成字符串。

转义字符“\”,通过“\”转变后面字母或者字符的含义,比如:"\"hello\"" 相当于输出  "hello"

\n:换行 

\b:退格(相当于backspace键)

\r:按下回车键 

\t:制表符(相当于tab键)


2.4.2  赋值运算符

符号:=,+=,-=,*=,/=,%=

释义:a+=b相当于 a=a+b,不过a+=b只进行了一次赋值操作

注意:赋值运算符会进行类型的强转操作,请看如下例子,问输出结果是什么?


答:编译失败,a+=5只进行了一次赋值操作,会把a与5的和强转为short类型,自动完成了强转操作,但是a=a+5中a+5提升为int类型,无法赋值给short,会损失精度。想要编译通过可以修改为 a = (short)(a + 5) 


2.4.3  比较运算符


注意:比较运算符的运算结果都是boolean型只有两个:true和false。 比较运算符的“==”不能误写为“=”。


2.4.4  逻辑运算符


注意:异或^的运算是两边相同结果为false,两边不同结果为true,&与&&的区别是当&&左边为false时,不会继续判断右边,效率比&高。

 

2.4.5  位运算符


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

规律: >>的最高位补什么由原有数据的最高位值而定,而>>>的最高位一律补0

   一个数异或另一个数两次,结果还是那个数 a^b^b = a 

运算规律:a<<b = a*2^n ,a>>b = a/2^n  6&3 相当于 


练习:

1  如何高效率的运算2*8?

答:2<<3 ,把2的二进制左移3位即可。

2  如何互换3和8?


2.4.6  三元运算符

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

规律:如果条件表达式为true,则结果为表达式1,否则为表达式2




运行结果是 4 


3  程序流程控制

3.1  判断结构

3.1.1  if语句

格式:

1  if(条件表达式) 

   {              

      执行语句;       

   }

2  if(条件表达式)

   {  

      执行语句;

   }  else 

   {

      执行语句;

   }

3  if(条件表达式)

   {

      执行语句;

   }else if(条件表达式)

   {

      执行语句;

   }else 

   {

      执行语句:

   }

 

3.1.2  switch语句

switch语句特点:                                                

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

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

3  结束switch语句有两种情况:遇到break,或执行到switch 的}结束,最后default的break可以省略                       

4  如果case或者default没有对应的break,那么程序会继续向下执行不再判断case,运行可以执行语句,直到遇到break或switch的}结束                                         

格式:

switch(表达式)

{

    case(值1):

执行语句;

break;

    case(值2):

执行语句;

break;

    default:

执行语句;

break;

}



程序运行结果是    default

                  case1

                  case2

3.2  循环结构

代表语句:while,do while,for

While语句格式:

While(条件表达式)

{

     执行语句;

}

do while语句格式:

do

{

     执行语句;

 } 

while(条件表达式);

for语句格式:

for(初始值;条件表达式;自增)

{

     执行语句;

}


3.2.1 它们之间的区别

while与do while的区别:

do while的特点是无论条件表达式是否满足,循环体至少执行一次。

while与for的区别:

1  变量都有自己的作用域,对于for,如果将用于控制循环的增量定义在for语句中,那么该变量只在for语句中有效;for语句执行完毕后,变量在内存中被释放。

2  for和while可以进行互换,如果定义循环增量,for更为合适。

 

3.2.2  for语句的嵌套

例:编写程序输出九九乘法表


3.2.3 break语句和continue语句

Break(跳出):应用范围是选择结构和循环结构

Continue(继续):应用范围是循环结构

1  这两个语句离开作用范围存在是没有意义的。

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

3  continue语句是结束本次循环进入下次循环

4  标号的出现可以使这两个语句作用于指定的范围


运行结果是   0 

             0123


4  函数

4.1  函数的定义

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

4.2  函数的格式

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

{

执行语句;

return 返回值;

}

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

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

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

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

return :返回调用者一个数值并结束函数。

 

4.3  函数的特点

*定义函数可以对函数进行封装

*便于对该功能进行复用

*函数只有被调用才可以被执行

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

*对于函数没有具体返回值的情况,返回值类型用void表示,可以省略return

注意:

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

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

 

4.4  函数的应用

两个明确:

1  明确要定义的功能最后的结果是什么?
2  明确在定义该功能的过程中,是否需要未知内容参与运算

例:定义函数打印一个矩形



运行结果:

* * * * * * * * 

* * * * * * * * 

* * * * * * * * 

* * * * * * * * 

* * * * * * * * 

 

4.5  函数的重载

重载的概念:在同一个类中允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。

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

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

 

示例:

1  返回两个整数的和:

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

2  返回三个整数的和:

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

3  返回两个小数的和:

public double add(double x,double y){return x+y;}

 

练习:

下列函数与void show(int a,char b,double c)重载的有哪些?

A void show(int x,char y,double z){}    

//没有重载,因为和原函数一样

B int show(int a,double c,char b){}            

//重载了,因为参数类型不同

C void show(int a,double c,char b){}            

//同上

D double show(int a,char b,double c){}          

//不允许同时出现的函数

E double show(int a){}                          

//重载了,因为参数个数不同

 

5  数组

5.1  数组的定义和格式

同一种数据类型的集合就叫数组,其实数组就是一个容器。数组的好处,可以自动给元素从0开始编号,方便操作这些元素。

1  元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

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

2  元素类型[] 数组名 = new 元素类型[]{元素,元素,...};

示例: int[] arr = new int[]{1,2,3,4};  注意不要在[]里定义元素个数

       Int[] arr = {1,2,3,4};


5.2  数组的内存结构

当new一个新数组时,虚拟机会先在堆内存中开辟一个内存空间,按顺序存入元素并初始化数值(如果没有数值默认为0),同时在栈内存中创建一个变量,并把数组在堆内存中的地址值赋值给这个变量。

 

5.3  数组的常见操作

5.3.1  数组的遍历


5.3.2  数组求最值


5.3.3  数组排序


5.3.4  二分法查找


5.4  二维数组

格式1:int[][] arr = new int[3][2];

表示有3个一维数组,每个一维数组有2个元素,一维数组的名称分别为arr[0],arr[1]

arr[2],给第一个一维数组的1角标元素赋值是 arr[0][1] = 5;

格式2:int[][] arr = new int[3][];

表示有3个一维数组,每个一维数组元素数量不确定,并且默认初始化值null;可以对这3个一维数组进行初始化,arr[0]=new int[2];arr[1]=new int[3];arr[2]=new int[5];

 

5.4.1  二维数组的内存结构

与一维数组一样,二维数组也是将地址值赋值给引用的变量,不过里面装的是一维数组的地址值,如果没有初始值,那么默认为null。

练习:给定 int[] x,y[]  以下赋值正确的是:

A x[0] = y;  B y[0] = x;  C y[0][0] = x;  D x[0][0] = y;  E y[0][0] = x[0]

ACD错误,BE正确


相关文章

    暂无相关文章

用户点评