1、什么是编程?
1)、为了让计算机解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程就是编程。
2)、为了让计算机能够理解人的意图,人类就必须将需要解决的问题的思路、方法、手段通过计算机能够理解的形式告诉计算机。使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。
这种人和计算机之间交流的过程就是编程。
2、什么是java语言?
java是sun(斯坦福大学网络公司)于1995年推出的一门高级编程语言,它是一种面向Internet的编程语言。随着java技术在web方面的不断成熟,已经成为web应用程序的首选开发语言。
语言特点:简单、完全面向对象、安全可靠、与平台无关
3、java5.0之后,java分为三大技术框架
1)、javaSE:标准版
它是java基础阶段主要学习的内容,也是java的基础。该技术是java的最核心技术。
2)、javaEE:企业版
它是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术有servlet、jsp等,主要是针对web应用程序开发。
3)、javaME:小型版
该技术多应用于一些电子产品的嵌入式开发,但已被Android技术取代。
4、什么是跨平台?原理是什么?
所谓的跨平台,就是java语言编写的程序,一次编译后,可以在多个系统平台上运行。
原理:java程序之所以能实现跨平台,是因为它根本不直接运行在任何底层平台上,而是需要在哪里运行,就在哪里(如windows平台、Linux系统平台)事先准备好相应的java虚拟机。而这只是仅仅安装和配置一个软件而已。
5、什么是jdk和jre?
1)、JRE(java runtime environment):即java运行环境。包括:java虚拟机和java程序所需的核心类库等。如果想要运行一个开发好的java程序,计算机中只需要安装JRE即可。
2)、JDK(java development kit java):即java开发工具包,jdk是提供给java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用再单独安装JRE了。
其中的开发工具:编译工具(javac.exe)、打包工具(jar.exe)等。
简而言之:我们使用JDK开发完成的java程序,交给JRE去运行
6、什么是JVM?
java virtual machine,即java虚拟机。它是运行所有java程序的抽象计算机,也是java语言的运行环境。JVM读取并处理编译过的与平台无关的字节码(class)文件。
1)、java编译器针对JVM产生的class文件,因此是独立于平台的
2)、java解释器负责将JVM的代码在特定的平台上运行
3)、java虚拟机是不跨平台的。
7、java程序的运行机制
.java文件,经过javac.exe编译成.class文件。.class文件经过java 类名执行得到结果
总结:java程序由java源码文件、字节码文件组成
8、java语法
1)、java严格区分大小写
2)、一个java源文件中可以定义多个java类,但是其中最多只能有一个类被定义成public类
如果源文件中包括了public类,那么源文件必须和该public类同名。
3)、一个源文件中包含了n个java类时,编译后会产生n份字节码文件,即每个类都会生成一个单独 的 class文件,且字节码文件名和其对应的类名相同。
9、注释
1)、单行注释用//
2)、多行注释用 /* */
3)、文档注释 /** */
注:多行注释和文档注释都不能嵌套使用
10、标识符
在java程序中为了增强程序的阅读性而自定义的名称,比如:类名称、方法名称、变量名称等
命名规则:
- 1)、由字母(A-Z/a-z)、数字(0-9)、下划线(_)、美元符号($)组成,不能以数字开头
- 注意:此处的字母还可以是中文、日文等
- 2)、对大小写敏感
- 3)、不得使用java中的关键字和保留字
- 4)、不得使用java API里面的类名作为自己的类名
11、java中的常量和变量
变量:占据着内存中的某一个存储区域,该区域有自己的名称(变量名称)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。
- 为什么要定义变量呢?
变量是用来不断的存放同一类型的常量,并可以重复使用。而使用变量时,需要注意变量的作用范围和初始化值。
- 变量语法格式:数据类型 变量名称=初始化值;
- 作用范围:定义开始到定义它的代码块结束为止,在同一范围内,不允许多个局部变量命名冲突。
12、成员变量和局部变量
- 局部变量:声明在方法中的变量,只要不声明在类括号里的变量都是局部变量。
- 成员变量:在方法体外,类体内声明的变量,又称之为字段(Field)或全局变量。
注:成员变量作用在整个类中;局部变量作用在定义开始到定义它的代码块结束为止。
其实,java中没有全局变量,由于java是面向对象的语言,所有变量都是类成员。
局部变量调用前如果没有初始化,编译的时候就会报错。
13、基础数据类型
在数据类型中,最常用就是基础数据类型。java中基本数据类型有8种,如下:
数据类型 | 占用空间(字节) | 取值范围 | 默认值 | |
整数型 | byte(字节类型) | 1 | 0 | |
short(短整型) | 2 | 0 | ||
int(整型) | 4 | 0 | ||
long(长整型) | 8 | 0 | ||
小数型 | float(单精度浮点型) | 4 | -3.4E+38~3.4E+38 | 0.0f |
double(双精度浮点型) | 8 | -1.7E+308~1.7E+308 | 0.0 | |
字符型 | char(字符类型) | 2 | 0- | '\u0000'(代表空格) |
布尔型 | boolean(布尔类型) | 1 | true或false | false |
14、基本数据类型转换之向上转型和向下转换
整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
- 向上转换:容量小的类型可自动转换为容量大的数据类型
如:byte、short、char-->int-->long-->float-->double
- 向下转换:容量大的类型需要强制转换才能转换为容量小的数据类型,使用时需要加上强制转换符,但是会造成精度降低或溢出。
注:byte、short、char之间不会相互转换,它们在计算时首先会转换为int类型。
boolean类型是不可以转换为其它基本数据类型的。
示例代码如下:
long num=123L;
int i=(int)num; //必须强制转换
int num2=123;
long l=num2; //自动转换,不需要强转
总结:小转大,自动转,也叫自动类型转换(隐式类型转换)
大转小,强制转,也叫强制类型转换(显式类型转换)
14、运算符
运算符是一种特殊符号,用来表示数据的运算、赋值和比较等
1)、算术运算符(+ 、 - 、* 、/ 、%)
++在变量前面:会先自行加1,再做赋值运算
++在变量后面:会先赋值,再自行加1
2)、赋值运算符(= 、 += 、-= 、*= 、/= 、%=)
3)、关系运算符(> 、>= 、< 、<= 、!=)
4)、条件运算符(&&、|| 、!& 、| 、^)
序号 | 运算符 | 含义 | 结果 |
1 | && | 短路与 | 两边为true,结果才是true |
2 | || | 断路或 | 有一边为true,结果就是true |
3 | & | 逻辑与 | 两边都是true,结果才是true |
4 | | | 逻辑或 | 有一边为true,结果就是true |
5 | ! | 逻辑非(取反) | !true=false、!false=true |
三目运算符:布尔表达式?表达式1:表达式2
执行原理:布尔表达式结果为true时,执行表达式1。布尔表达式结果为false时,执行表达式2.
如:char sex=true? '男':'女';
注:&&和&的区别
运行结果没有任何区别,完全相同。只不过短路与会发生短路现象。那么什么是短路现象呢?
右边表达式不执行,这种现象叫做短路现象。
那么什么时候用&&,什么时候用&呢?
从效率上,&&比&效率高,因为逻辑与不管第1个表达式结果是什么,第二个表达式一定会执行。大部分情况下,建议使用短路与,只有当既需要左边表达式执行,又需要右边表达式执行的时候,才会选择逻辑与。
5)、位运算符(& 、| 、^ 、~ 、>> 、<< 、<<< 、>>>)
15、程序流程控制
程序流程控制分为:顺序结构、条件结构、循环结构、控制循环结构
15.1、顺序结构
如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,直到程序的最后
15.2、条件结构(也叫分支结构)
形式1、if(条件表达式){
执行语句;
}
形式2、if(条件表达式){
条件表达式成立时执行语句;
}else{
条件表达式不成立时执行语句;
}
形式3、if(条件表达式1){
条件表达式1成立时执行语句;
}else if(条件表达式2){
条件表达式2成立时执行语句;
}......
else{
//上述条件表达式都不成立时,执行的语句;
}
switch控制语句,语法格式如下:
switch(表达式){
case 表达式可能的结果值1:
执行语句;
break;
case 表达式可能的结果值2:
执行语句;
break;
......
default:
执行语句;
break; //最后这个一般不写
}
语法解析:先执行第1个case,都没有匹配的case值则执行default。
结束switch语句有两种情况,遇到break,switch语句执行结束。如果匹配的case或者default都没有对应的break,那么程序会从第1次匹配的case语句开始继续向下执行,运行可以执行的语句,直到遇到break或者switch结束为止。
注:switch语句只能使用byte、char、short、int四种基本类型以及它们的包装类和枚举。
1)、当分支较多时,用switch的效率很高。因为switch是随机访问的,就是确定了选择值之后直接跳转到哪个特定的分支。但是if...else是遍历所有的可能值,直到找到符合条件的分支。如此看来,switch的效率确实比if...else要高得多。但是switch只是在常量选择分支时比if...else效率高,但if..else能应用于更多的场合,比较灵活。
2)、switch...case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况。switch...case的空间利用率将变得很低。
15.3、三大循环结构
循环结构用于处理需要重复执行的操作,根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落我们称之为循环体。
while(条件表达式值为true){执行语句}:事先不需要知道循环执行多少次
do{执行语句;}while(条件表达式值为true):同上,只是至少要执行一次(先做,后判断)
for:需要知道循环次数
for循环语法结构如下:
for(初始化表达式A;循环条件表达式B;循环后的操作表达式C){
执行语句D;
}
执行顺序:ABDCBDC
15.4、嵌套循环与流程控制
嵌套循环:循环里套循环
假设外循环的循环次数是m次,内循环的循环次数是n次。那么内层循环的循环次数需要m*n次。
流程控制:break语句和continue语句
1)、break:终止该层循环
2)、continue:跳过本次循环,继续下次循环