一、Java概述
1、Java语言概述和技术体系架构
Java是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言。是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Java的起源:一个Green项目
1995年,Oak正式更名为java
1996年,Sun公司发布JDK1.0
1998年,发布了1.2,也叫java2
1999年,Sun公司把java技术分成了J2SE,J2ME,J2EE
2000年,JDK1.3,1.4发布
2005年,Java的各个版本取消2
Java语言的三种技术架构:
1. J2SEJava 2 Platform Standard Edition)标准版是为开发普通桌面和商务应用程序提供的解决方案。该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。比如Java版的扫雷。
2. J2EE(Java 2 Platform Enterprise Edition)企业版是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如 Servlet Jsp等,主要针对于Web应用程序开发。
3. J2ME(Java 2 Platform Micro Edition)小型版是为开发电子消费产品和嵌入式设备提供的解决方案。该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。
Java5.0版本后,更名为 JAVAEE JAVASE JAVAME
2、Java语言特性(跨平台)
高级语言的工作原理
windows下的c语言编程过程
c源程序(扩展名.c)——–>windows可执行性文件——–>windows操作系统
java语言编程过程
Java源程序(扩展名.java)——–>Java字节码文件(扩展名.class)——–>jvm虚拟机(跨平台)
3、JDK,JRE及JVM之间的关系
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境、Java工具和Java基础类库。
JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似
4、JDK的下载,安装及卸载
JDK(Java Development Kit Java开发工具包)
下载jdk官方网址:www.oracle.com;java.sun.com
安装jdk:傻瓜式安装,下一步即可。建议:安装路径不要有中文或者特殊符号如空格等。当提示安装JRE时,可以选择不安装。
5、环境变量Path的配置,notepad命令
我的电脑–属性–高级–环境变量
编辑path环境变量,在变量值开始处加上java工具(JDK)所在目录,后面用 “ ; ”和其他值分隔开即可。
打开DOS命令行,任意目录下敲入javac。
如果出现javac 的参数信息,配置成功。
6、环境变量CLASSPATH的配置
JVM查找类文件的顺序:
如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件。
如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件,值的结尾处如果加上分号,那么JVM在classpath目录下没有找到要指定的类文件,会在当前目录下在查找一次。
值的结尾处如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目录下有,也不会运行。
建议:配置classpath环境变量时,值的结尾处不要加分号,如果需要访问当前目录可以用 “.;”表示。
7、第一个Java经典程序“HelloWorld”
package cn.itcast;
/第一个程序,hellowrold/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWrold");
}
}
输出结果:HelloWrold
二、Java关键字和标识符
1、Java关键字
被Java语言赋予了特殊含义的单词,如:public,class,private,if,for,catch等等…;
特点:关键字中所有字母都为小写。goto和const虽然从未使用,但也作为 Java 关键字保留,记住保留字也是不能当作标识符,java中是没有sizeof这个关键字的,这个标识符在C中。
二、标识符
Java语言中,对各种变量、方法和类等要素命名时使用的字符序列称为标识符。简单记,就是起名字。
命名规则:
- 由26个英文字母大小写,数字0-9,_,$等组成。
- 不能以数字开头。
- 不能与java的关键字重名。
- 命名规范 见名知意,驼峰命名。
包—>所有单词小写。看成是一个文件夹。如我以黑马的网址命名我的项目:www.itcast.cn cn.itcast.包的作用 则该文件中所有的类位于cn/itcast/这个路径下
类和接口:
1. 如果是由一个单词组成,那么单词首字母大写。举例:Test,Demo。
2. 如果是由多个单词组成,那么每个单词的首字母大写。举例:TestDemo。
变量与方法:
1.如果是由一个单词组成,那么单词首字母小写。举例:student,show。getMax()。
2.如果是由多个单词组成,第一个单词首字母小写,其后每个单词的首字母大写。举例:stuName。getMax();
常量:
1.如果是一个单词组成,那么所有单词全部大写。举例:SUM。
2.如果由多个单词组成,每个单词大写,并且以下划线相连接。举例:STUDENTMAXAGE。
三、注释注解说明代码的,用于给人看的。
注释的分类:
1. 单行注释 //
2. 多行注释 /* */
3. 文档注释 /* /
注释的用途:1、注解说明文字;2、用于调试代码。
四、变量和常量
变量:
在程序的运行过程中,其值在指定范围内变化的值,是内存中一个区域,用于存储数据。
变量的定义格式:
A:数据类型 变量名 = 初始化值;
变量在使用的时候有两种形式:
A:第一种,在声明的时候,就初始化值;数据类型 变量名 = 初始化值;举例:int x=12; System.out.println(x);
B:第二种 在使用前,赋值–>(声明、赋值、使用);举例 byte y;y= 100; System.out.println(y);
常量:
整数常量:所有整数;小数常量:所有小数;布尔型常量:较为特殊,只有两个数值。true false;字符常量:将一个数字字母或者符号用单引号(”)标识.;字符串常量:将一个或者多个字符用双引号标识;null常量:只有一个数值就是:null。
五、数据类型及数据类型转换
1、java语言分为两种数据类型:
A:基本数据类型
B:引用数据类型(类,接口,数组)
基本数据类型:
A:区别 在内存中分配的空间大小不同,从而导致它表示的数据范围不同
B:4类8种
整数:byte 占1个字节//8个开关,8个二进制位 1byte = 8bit;short 占2个字节;int 占4个字节0;long 占8个字节 其后加L或l标识
浮点数float:float 占4个字节 其后加F或f标识,如(3.3f )
double :占8个字节,如(2.34)
字符:char 占2个字节 0 - 65535
布尔型:只有两种(true,false),占一个字节
*注意:默认情况下,整数是int类型,浮点数是double类型
2、数据类型转换
1、整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则
容量小的类型与容量大的类型进行计算,默认转换为容量大的数据类型;数据类型按容量大小排序为:
byte,short,char->int->long->float->double
byte 和 short运算时不能和char之间互相转换,byte可以直接赋值给short,但是他们三者在计算时首先会转换为int类型容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。
2、强制转换符
格式:(数据类型)(要被转换的数据) byte b = (byte)(300);
3、字符型参与运算
首先会去找对应字符的unicode码值。然后运算。char 类型取值范围0~2(16)-1。
4、布尔型不能参与运算
5、字符串参与运算,它是和参与运算的数据相连接组成了一个新的字符串。
六、Java运算符
1、算术运算符+,-,*,/,%,++,–
重点:
a:%(取余)
当左边的绝对值小于右边:结果是左边
当左边的绝对值等于右边或者是右边倍数的时候:结果是0
当左边的绝对值大于右边:结果是余数,符号取决与左边的的符号
取余的正负号取决于左边,右边忽略不记
用途:任意正整数%2 结果是要么0,要么1。用于切换条件
b:++(递增),–(递减)
递增,递减运算符。就是加1或者减1
单独存在,放在操作数的前面或者后面,结果一样
参与运算时:
放在变量的前面,先自身加或者减1,然后再参与运算
放在变量的后面,先参与运算,然后再自身加或者减1
c:+作为数据的符号(正号),做加法运算,字符串连接符”5 + 5 =” + (5 + 5);
2、赋值运算符
A:=:赋值运算符 把右边的值赋给左边
举例:int x = 3; 把3赋给int类型变量x
int a,b,c;
a = b = c = 5;
B:+=:加赋值运算符 把左边和右边的和赋给左边
举例:int x = 3; x+=2;等同于 x = x + 2;
面试题:
byte b = 5;
b = b + 2;
b += 2; b = (byte)(b + 2);
System.out.println(b);
会不会报错?
答:会报错,因为b = b + 2;出现数据转换错误,必须强制类型转换,如:
package cn.itcast;
public class TransDemo {
public static void main(String[] args) {
byte b = 5;
b = (byte) (b + 2);
b += 2; b = (byte)(b + 2);
System.out.println(b);
}
}
输出结果:11
注意:b += 2;因为+=运算符在给b赋值时,自动完成了强转操作。
3、比较运算符==,!=,>,<,>=,<=
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
4、逻辑运算符
逻辑与运算符 &:
第一个条件 第二个条件 结果
true true true
false true false
true false false
false false false
简单记:左右两边同时为true,结果为true。
逻辑或运算符 |:
第一个条件 第二个条件 结果
true true true
false true true
true false true
false false false
简单记:左右两边只要有一个结果是true,结果为true。
逻辑异或运算符 ^:
第一个条件 第二个条件 结果
true true false
false true true
true false true
false false false
简单记:左右两边相同,结果为false。(相同为0,不同为1)
逻辑非运算符 !:
!true false
!false true
!!true true
短路与:
&:左边无论什么结果,右边都执行。
&&:左边为false,右边不执行,结果为false。
短路或:
|:左边无论什么结果,右边都执行。
||:左边为true,右边不执行,结果为true。
5、位运算符
位运算符2<<3 2 * 8 == 2 * 2^3
一个整数向左移动几位就乘以2的几次幂
一个整数向右移动几位就除以2的几次幂,高位是0就补0,高位是1就补1
无符号右移无论最高位的符号位是0还是1,用无符号右移后高位符号位都是补0
6、三元运算符
格式 :(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
条件运算符运算完之后一定有一个结果
如:
int x,y,z;
x = 1;
y = 2;
z = x > y ? x+y : y;
第二讲 Java语句结构
一、顺序结构
顺序结构:按前后顺序执行的语句体。
package cn.itcast;
public class OrderDemo {
public static void main(String[] args) {
int x=1;
int y=4;
int z=x+y;
System.out.println("x+y="+z);
}
}
结果:顺序执行,x+y=5;
二、判断语句if
if语句有三种格式:
第一种:if(){}
if(条件表达式){
执行语句;
}
举例:
package cn.itcast;
public class IfDemo {
public static void main(String[] args) {
int x=10;
if(x>8){//条件表达式
System.out.println("这是第一种if格式");//执行语句
}
System.out.println(x);
}
}
第二种: if(){}else{}
if(条件表达式){
执行语句;
}else{
执行语句;
}
举例:
import java.util.*;
public class if_else{
public static void main(String args[]){
System.out.println("请输入你的成绩:");
Scanner in=new Scanner(System.in);
int score=in.nextInt();
if(score>90){
System.out.println("奖励你一根棒棒糖");
}
else{
System.out.println("面壁思过");
}
}
}
第三种:if(){}else if(){}else
if(条件表达式){
执行语句;
}else if (条件表达式){
执行语句;
}else{
执行语句;
}
举例:
import java.util.*;
public class if_else1{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
System.out.println("请输入你的成绩:");
int score=in.nextInt();
if(score>=90){
System.out.println("优秀");
}else if(score>=80){
System.out.println("良好");
}else if(score>=60){
System.out.println("中等");
}else {
System.out.println("差");
}
System.out.println("好好测试");
}
}
4、if语句嵌套
多个if语句的嵌套使用
举例:
int x = 2, y = 1;
if(x==1){
if(y==1){
System.out.println("a");
}else{
System.out.println("b");
}
}else{
if(y==1){
System.out.println("c");
}else{
System.out.println("d");
}
}
三、分支结构switch
格式:
int x = 1;
switch (表达式){//byte,short,int,char,String 枚举
case 表达式里对应的值:
执行语句;
break;
case 表达式里对应的值:
执行语句;
break;
......
default:
执行语句;
break;//最后一句的break可写可不写,因为程序已经执行到了末尾
}
我做一个关于判断输入月份是30天还是31天或者28的例子
package lesson3;
import java.util.Scanner;
public class Switch {
public static void main(String [] args){
Scanner in=new Scanner(System.in);//键盘输入
System.out.println("请输入月份:");
int month=in.nextInt();//接收输入的数字
if(month==1|month==3|month==5|month==7|month==8|month==10|month==12){
System.out.println(month+"月31天");
}
if(month==4|month==6|month==9|month==11){
System.out.println(month+"月30天");
}
if(month==2){
System.out.println(month+"月28天");
}
}
}
2、switch的嵌套使用
例子:交通灯案例
package lesson3;
import java.util.Scanner;
public class SwitchTrafficLights {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);//键盘输入
System.out.println("请输入交通信号灯(红、绿、黄):");
String str=scan.next();
char L=str.charAt(0);
switch(L){
case '红':
System.out.println("有木有交警?");
String str1=scan.next();
char P=str1.charAt(0);
/* if(P=='有'){//第一种
System.out.println("stop");
}else{
System.out.println("go");
}*/
switch(P){//第二种
case '有':
System.out.println("stop");
break;
default:
System.out.println("go");
}
break;
case '绿':
System.out.println("go");
break;
case '黄':
System.out.println("wait");
break;
default:
System.out.println("call Police!!");
}
}
}
switch结束的两种情况:
1,当程序执行过程中遇到了break
2,当程序执行到了末尾处
switch语句需要注意的两个细节:
1,当switch表达式的值与其中一个case匹配的时候,这个case里没有写break;语句,那么程序会继续执行下个case里的执行语句,不会再对case值进行判断;
2,应用于当几个case里的值所要执行的语句都一样的时候,我们可以不写break
四、循环语句For
1、for循环
格式:
for(初始化表达式1;循环条件表达式2;循环后的操作表达式4){
执行语句;(循环体)3
}
案例:计算1-10的阶乘
package lesson3;
public class ForExample3 {
public static void main(String[] args){
int num=1;
for(int i=1;i<=10;i++){
num*=i;
System.out.println(i+"阶乘"+num);
}
}
}
2、for循环嵌套及案例
格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式){//这是外层循环
执行语句;(循环体){
//下面是内循环
for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句;(循环体)
}
}
案例:用for循环做右边的这个形状
/*
* *
*** * *
***** * *
******* * *
***** * *
*** * *
* *
*/
package lesson3;
public class ForExample6 {
public static void main(String[] args){
//上半部分
for(int i=1;i<=4;i++){//外循环
for(int j=1;j<=4-i;j++){//内循环
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){//内循环
if(j==1|j==2*i-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
//下半部分
for(int i=3;i>=1;i--){
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
if(j==1|j==2*i-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
结果:
五、循环语句while
1、while循环
格式:
while (条件表达式){
循环体;
}
案例:求1-100之内奇数和偶数的和
package lesson3;
public class WhileExample1 {
public static void main(String[] args) {
int i=1;
int sum1=0;
int sum2=0;
while(i<=100){
if(i%2!=0){
sum1+=i;
}else{
sum2+=i;
}
i++;
}
System.out.println("1-100奇数的和:"+sum1);
System.out.println("1-100偶数的和:"+sum2);
}
}
2、do while循环
格式:
do{
循环体;
控制循环次数
}
while (条件表达式);
案例:1-100之间能被5和6整除的数,1-100之间奇数和偶数的和
package lesson3;
public class DoWhileExample1 {
public static void main(String[] args){
int i=1;
int sumOdd = 0;
int sumEven = 0;
do{
if(i%2 != 0){//判断是否奇数
sumOdd += i;
}else{//不是奇数就是偶数
sumEven += i;
}
if(i%5==0&&i%6==0){
System.out.println("1-100之间能被5和6整除的数是:"+i);
}
i++;
}while(i<=100);
System.out.println("1-100奇数的和是:"+sumOdd);
System.out.println("1-100偶数的和是:"+sumEven);
}
}
*注意:while和do while的区别:
- do while语句会先执行循环体,再去判断条件,也就是说无论条件是否满足他都至少要执行一次循环体,先执行,再判断
- while 先判断条件,只要条件不满足就不在执行循环体了,先判断,再执行.
六、流程控制continue和break
- 这两个语句离开应用范围,存在是没有意义的。
- 这两个语句单独存在下面都不可以有语句,因为执行不到。
- continue语句是结束本次循环继续下次循环。
- break语句是结束循环
- 标号的出现,可以让这两个语句作用于指定的范围。