获取更多资源关注Java帮帮IT资源分享网
一、黑马程序员—java 概述与基础知识
1、何为编程?
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果
的过程。
为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通
过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完
成某种特定的任务。这种人和计算机之间交流的过程就是编程。
2、Java 语言概述,历史、特点
是 SUN(Stanford University Network,斯坦福大学网络公司)1995 年推出的一门高级语言。
是一种面向 Internet 的编程语言。
随着 Java 技术在 web 方面的不断成熟,已经成为 Web 应用程序的首选开发语言。
是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
java5.0 之后的三大技术框架
J2EE(Java 2 Platform Enterprise Edition)企业版
在 jdk5.0 版本后称为 JAVAEE,是为开发企业环境下的应用程序提供的一套解决方案。该技术
体系中包含的技术如 Servlet Jsp 等,主要针对于 Web 应用程序开发。是传智播客就业班和
黑马训练营的主要学习内容之一.。
J2SE(Java 2 Platform Standard Edition)标准版
在 jdk5.0 版本后称为 JAVASE,这是在 java 基础阶段主要学习的内容,也是 java 的基础,以后不
管从事 Android 开发或者是物联网+云计算的开发,等是建立在 JSE 基础上的,因此该技术是
java 的最核心技术,是传智播客基础班的主要上课内容.。
J2ME(Java 2 Platform Micro Edition)小型版
在 jdk5.0 版本以后称为 JAVAME,该技术多应用于一些电子产品的嵌入式开发,以前在手机开
发上应用的也比较多,但是随着智能手机的发展,现在手机应用程序(比如 Android 程序)的开
发已经不再使用该技术。
3、什么是跨平台性?原理是什么?JVM
所谓跨平台性,是指 java 语言编写的程序,一次编译后,可以在多个系统平台上运行。
实现原理:Java 程序是通过 java 虚拟机在系统平台上运行的,只要该系统可以安装相
应的 java 虚拟机,该系统就可以运行 java 程序。(注意不是能在所有的平台上运行,关键是
该平台是否能安装相应的虚拟机)。
我的总结:Java 程序之所以能够实现跨平台运行,是因为它根本就不直接运行在任何底层
平台上,而是需要在哪里运行,就在哪里(如 Windows 平台)事先准备好自己的 Java 平台,
而这只是仅仅是安装和配置一个软件而已!
4、Jre 和 Jdk 的区别?
JRE:(Java Runtime Environment),java运行环境。包括Java 虚拟机(JVM Java Virtual Machine)
和 Java 程序所需的核心类库等,如果想要运行一个开发好的 Java 程序,计算机中只需要安
装 JRE 即可。
JDK:(Java Development Kit Java)开发工具包。JDK 是提供给 Java 开发人员使用的,其中
包含了 java 的开发工具,也包括了 JRE。所以安装了 JDK,就不用在单独安装 JRE 了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
简单而言:使用 JDK 开发完成的 java 程序,交给 JRE 去运行。
我的总结:必须熟练的记忆,核心类库,开发工具!
5、java 虚拟机 JVM
Java Virtual Machine ,简称 JVM;
它是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,它是 Java 最具吸引力的特
性之一,JVM 读取并处理编译过的与平台无关的字节码(class)文件。
Java 编译器针对 JVM 产生 class 文件,因此是独立于平台的。
Java 解释器负责将 JVM 的代码在特定的平台上运行。
Java 虚拟机是不跨平台的.
6、Java 程序运行机制
编译: javac 文件名.文件后缀名
运行: java 类名
我的总结:Java 程序的组成:Java 源文件,字节码文件。
7、学习 java 注意的地方
Java 语言拼写上严格区分大小写;
一个 Java 源文件里可以定义多个 Java 类,但其中最多只能有一个类被定义成 public 类;
若源文件中包括了 public 类,源文件必须和该 public 类同名;
一个源文件中包含 N 个 Java 类时,编译后会生成 N 份字节码文件,即每个类都会生成一份
单独的 class 文件,且字节码文件名和
其对应的类名相同;
我的总结:一个 Java 源文件只定义一个类,不同的类使用不同的源文件定义;
将每个源文件中单独定义的类都定义成 public 的;
保持 Java 源文件的主文件名与源文件中的类名一致;
8、Java 语法格式
任何一种语言都有自己的语法规则,Java 也一样,既然是规则,那么知道其如何使用就可以了。
代码都定义在类中,类由 class 来定义,区分 public class 和 class;
代码严格区分大小写,如 main 和 Main 是不一样的;
Java 中的标识符与关键字;
注释;
main 方法的作用:
程序的入口
保证程序的独立运行
被 JVM 调用
9、代码注释:单行//,多行/* */,文档注释/** */
1.单行注释 //:
//后到本行结束的所有字符会被编译器忽略;
2.多行注释 /* */:
/* */之间的所有字符会被编译器忽略
3.文档注释 /** */:
在/** */之间的所有字符会被编译器忽略,java 特有的(用于生成文档);
我的总结:多行和文档注释都不能嵌套使用。
10、Java 中的标识符
可简单理解为在 Java 程序中为了增强阅读性自定义的名称。比如:类名,方法名,变量名
等。
命名规则:
(1) 由字母、数字、下划线、$组成,不能以数字开头
注意:此处的字母还可以是中文,日文等;
(2) 大小写敏感
(3) 不得使用 java 中的关键字和保留字
(4) 别用 Java API 里面的类名作为自己的类名。
11、java 中的常量和变量
变量的概念:
占据着内存中的某一个存储区域;
该区域有自己的名称(变量名)和类型(数据类型);
该区域的数据可以在同一类型范围内不断变化;
为什么要定义变量:
用来不断的存放同一类型的常量,并可以重复使用;
使用变量注意:
变量的作用范围, 初始化值
定义变量的格式:
数据类型 变量名 = 初始化值;
注:格式是固定的,记住格式,以不变应万变。
作用范围:定义开始到定义它的代码块结束;
同一范围内,不允许多个个局部变量命名冲突
12、Java 成员变量和局部变量
局部变量:不是声明在类体括号里面的变量;
局部变量使用前必须初始化值;
局部变量没有默认初始化值;
局部变量的作用域是从定义开始到定义它的代码块结束;
成员变量:在方法体外,类体内声明的变量,又称字段(Field)或全局变量;(其实 Java 中没有全
局变量,由于 Java 是面向对象语言,所有变量都是类成员)
成员变量的作用域是整个类中;
我的总结:注意成员变量和局部变量的区别
package reviewDemo;
public class Demo2 {
public static void main(String[] args) {
int i;
System.out.println(i);
}
}
备注:局部变量调用前没有初始化,所以编译的时候就会报错!
package reviewDemo;
public class Demo2 {
static int i;
public static void main(String[] args) {
System.out.println(i);
}
}
备注:此时 i 为全局变量,未初始化会被赋予默认的初始化值!程序正确!
我的总结:
局部变量是定义在方法中的变量,,,出了该方法就不能访问该变量了....
成员变量是在类中定义,,,,并且在类的成员方法中都能访问的变量..
13、基本数据类型
在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型。可以使用这些类型的
值来代表一些简单的状态。
Java 语言的基本数据类型总共有以下 8 种,下面是按照用途划分出的 4 个类别:
定点类型:
整数型是一类代表整数值的类型。当需要代表一个整数的值时,可以根据需要从 4 种类型
中挑选合适的,如果没有特殊要求的话,一般选择 int 类型。4 种整数型区别主要在每个数
据在内存中占用的空间大小和代表的数值的范围。
浮点类型:
小数型是一类代表小数值的类型。当需要代表一个小数的值时,可以根据需要从以下 2 种
类型中挑选合适的。如果没有特殊要求,一般选择 double 类型。
由于小数的存储方式和整数不同,所以小数都有一定的精度,所以在计算机中运算时不够精
确。根据精度和存储区间的不同,设计了两种小数类型。
字符型:
字符型代表特定的某个字符,按照前面介绍的知识,计算机中都是以字符集的形式来保存字
符的,所以字符型的值实际只是字符集中的编号,而不是实际代表的字符,由计算机完成从
编号转换成对应字符的工作。Java 语言中为了更加方便国际化,使用 Unicode 字符集作为
默认的字符集,该字符集包含各种语言中常见的字符。在程序代码中,字符使用一对单引号
加上需要表达的字符来标识,例
如’A’、’a’等,当然也可以直接使用字符编码,也就是一个非负整数进行表示。
布尔型:
布尔型代表逻辑中的成立和不成立。Java 语言中使用关键字 true 代表成立,false 代表不成
立。布尔型是存储逻辑值的类型,其实很多程序中都有逻辑值的概念,Java 把逻辑的值用
布尔型来进行表达。
14、基本数据类型转换之向上转型和向下转换
向上转换:
整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
容量小的类型可自动转换为容量大的数据类型;
byte,short,char → int → long → float → double
byte,short,char 之间不会相互转换,他们在计算时首先会转换为 int 类型。
boolean 类型是不可以转换为其他基本数据类型。
Eg:
int i = 123;
long l = i;//自动转换,不需强转
float f = 3.14F;
double d = f;
向下转换:
整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
容量小的类型可自动转换为容量大的数据类型;
byte,short,char → int → long → float → double
byte,short,char 之间不会相互转换,他们在计算时首先会转换为 int 类型。
boolean 类型是不可以转换为其他基本数据类型。
Eg:
long l = 123L;
int i = (int) l;//必须强转
double d = 3.14;
float f = (float) d;
我的总结:类型转化
小转大,自动!自动类型转换(也叫隐式类型转换)
大转小,强转!强制类型转换(也叫显式类型转换)
15、Java 的运算符
运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种:
算术运算符(+ 、— 、* 、/ 、%)
赋值运算符(= 、+=、-=、*=、/=,、%=)
关系运算符(>、>=、<、<=、!=)
条件运算符(&&、||、!&、|、^)
位运算符(&、|、^、~、>>、<<、<<<、>>>)
我的总结:
逻辑运算符用于连接布尔型表达式,在 Java 中不可以写成 3<x<6,应该写成 x>3 & x<6 。
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为
真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
“ ^ ”与“|”不同之处是:当左右都为 true 时,"^"结果为 false。
16、表达式和三目运算符
是由数字、运算符、数字分组符号(括号)等以能求得数值的有意义排列的序列;
a + b
3.14 + a
(x + y) * z + 100
boolean b= i < 10 && (i%10 != 0)
表达式的类型和值:
对表达式中操作数进行运算得到的结果是表达式的值。
表达式值的数据类型即为表达式的类型。
表达式的运算顺序
应按照运算符的优先级从高到低的顺序进行;
优先级相同的运算符按照事先约定的结合方向进行;
“三目运算符”,语法格式:
x ? y : z;
其中 x 为 boolean 类型表达式,先计算 x 的值,若为 true,则整个三目运算符的结果是表达式
y 的值,否则就是 z 的值。
package reviewDemo;
public class Demo2 {
public static void main(String[] args) {
String s = "lz";
s = (s == "lz" ? "正确" : "错误");
System.out.println(s);
}
}
输出:正确
17、程序流程控制
顺序结构
分支结构(条件结构)
循环结构
控制循环结构
顺序结构:
如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行
下一条语句,直到程序的最后。
if 语句:
基本语法:if(表达式){方法体}else if(表达式){方法体}else(方法体)
几种形式:
三种格式:
if(条件表达式){执行语句;}
if(条件表达式){执行语句;}else{执行语句;}
if(条件表达式){执行语句;}else if (条件表达式){执行语句;}……else{执行语句;}
public class If3
{
public static void main(String args[])
{
int i = 3;
if (i > 5)
{
System.out.println("变量 i 大于 5");
}
else if (i > 4)
{
System.out.println("变量 i 小于 4");
}
else
{
System.out.println("其他");
}
}
}
switch 控制语句
格式:
switch(表达式)
{
case 表达式可能的结果值 1:
执行语句;
break;
case 表达式可能的结果值 2:
执行语句;
break;
...
default:
执行语句;
break;//最后这个一般不写
}
备注:
case 之间与 default 没有顺序。先执行第一个 case,都没有匹配的 case 值执行 default。
结束 switch 语句的两种情况:遇到 break,switch 语句执行结束。
如果匹配的 case 或者 default 没有对应的 break,那么程序会从第一次匹配的 case 语句开始
继续向下执行,运行可以执行的语句,直到遇到 break 或者 switch 结束为止。
class switch2
{
public static void main(String[] args)
{
int a = 7,b = 5;
switch(a-b)
{
case 3://表达式可能的值;
{
System.out.println("33!");
}
break;
case 4:
{
System.out.println("44!");
}
break;
default://都没有执行则 执行该语句!
System.out.println("其它的");
}
}
}
注意:switch 语句只能使用 byte、char、short、int 四种基本类型以及它们的包装类和枚
举
18、三大循环结构:
用于处理需要重复执行的操作;
根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落我们称为循环体;
while:事先不需要知道循环执行多少次;
do while:同上,只是至少要执行一次(先做,后判断);
for:需要知道循环次数;
循环结构(while & do while)
while 语句
格式:
while(条件表达式值为 true)
{
执行语句;
}
do while 语句
格式:
do
{
执行语句;
}
while(条件表达式值为 true);
我的总结:do while 特点是无论条件是否满足,循环体至少被执行一次。
循环里的条件表达式不能直接写 false 或直接写结果是 false 的表达式,不过可以使用变量来
传递 false 值;
循环结构(for)
格式:
for(初始化表达式(1);循环条件表达式(2);循环后的操作表达式(3))
{
执行语句;(4)
}
执行顺序:(1) → (2) → (4) → (3) → (2) → (4) → (3)
备注:
1, for 里面的 3 个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行
循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条
件不满足为止。
2, while 与 for 可以互换,区别在于 for 为了循环而定义的变量在 for 循环结束就在内存中释
放。而 while 循环使用的变量在循环结束后还可以继续使用。
3, 最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,
而是根据某些条件,来控制循环。
Eg:
用三种循环控制求出 100 以内前 5 个 3 的倍数的数字;
class while
{
public static void main(String[] args)
{
int i = 1,k = 0;
while(i<=100)
{
if(i%3==0)
{
if(k<5)
System.out.println(i);
k++;
}
i++;
}
}
}
class dowhile
{
public static void main(String[] args)
{
int i = 1,k = 0;
do{
if(i%3==0)
{
if(k<5)
System.out.println(i);
k++;
}
i++;
}
while(i<=100);
}
}
class for
{
public static void main(String[] args)
{
int i = 1,k = 0;
for(;i<100;i++)
{
if(i%3==0&&k<5)
{
System.out.println(i);
k++;
}
}
}
}
19、嵌套循环与流程控制
嵌套循环:循环里套循环
假设外循环的循环次数是 m 次,内循环的循环次数是 n 次,那么内层循环的循环次数需要 m
* n 次。
Eg:利用 for 循环语句的嵌套打印出乘法口诀表
class break1
{
public static void main(String[] args)
{
for(int i=1;i<=10;i++)//定义 i 与 j 的值必须在 for 循环里面,否则每次跳出循环重新
执行就无法取值
{
for(int j=1;j<=10;j++)
{
if(j<=i)
System.out.print(j+"*"+i+"="+i*j+" ");//小注意:print()括号里面
必须传递参数,println()无限制!
}
System.out.println();
}
}
}
流程控制
break 语句、 continue 语句;
break:终止该层循环;
continue:跳过该层循环
注:
①:若这两个语句离开应用范围,存在是没有意义的。
②:这个两个语句后面都不能有语句,因为执行不到。
③:continue 语句是跳过本次循环,继续下次循环。
④:标签的出现,可以让这两个语句作用于指定的循环。
Eg:
package reviewDemo;
public class Demo2 {
public static void main(String[] args) {
int i = 1;
for (; i < 10; i++) {
System.out.println(i);
if(i == 8){
break;//流程控制,不会完全执行!
}
}
}
}