黑马程序员-----Java基础知识,黑马程序员-----java
黑马程序员-----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正确
相关文章
- 暂无相关文章
用户点评