Java:面向对象的编程语言
分类:
1)J2SE JAVASE --桌面单机版程序
2)J2EE JAVAEE --web项目
3)J2ME JAVAME --嵌入式的手机程序
特点:
1)跨平台的(一次编写,处处运行)
原理:
前台编写的.Java文件经过编译生成.class文件(字节码文件),.class文件经过解释在Java虚拟机(JVM)中运行.
Java虚拟机在操作系统之上,jre在Java虚拟机之上,.class文件运行在jre上.
2)半编译半解释
3)面向对象的编程语言(封装,继承,多态)
基于对象的编程语言(JavaScript),只满足其中一两个
4)简单性
5)安全性:
6)健壮性:
7)分布式:
8)多线程:
9)动态性:
JVM组成:
1)类加载器(ClassLoader):加载类
2)类型校验器:进行编译检查
3)垃圾回收机制:
自动回收,人为不可干预,优先级别比较低,CPU空闲时回收,当内存快满时,优先级变为最高,执行回收
jre:
Java的运行时环境
面向对象:Java C++
面向过程:C
环境变量:
Path:执行文件路径(bin)
classpath: . 字节码文件路径
Java_home:
命令:
javac:编译命令 javac 类名.java
java:执行命令 java 类名
Java的基本语法:
1)java的大小写敏感
2)一句话结束加;
3)一个java文件可以有多个class,但是一个java文件只能有一个公开类,文件名必须与公开类同名
4)java注释:
单行注释://
多行注释:/* */
文档注释:/** */ javadoc
标识符:
变量:
命名规范:
1)字母、_、$开头,后面跟着字母、_、$、数字
2)不能是Java的关键字[或者保留字goto]
3)不能有空格
编码规范:
1)类名、接口名:Pascal原则,每个单词首字母大写
2)方法名、变量名:Camel原则,第一个单词首字母小写,之后每个单词首字母大写
3)常量:全部大写,单词之间用_隔开
4)包名:全部小写
变量声明:[访问修饰符] 数据类型 变量名[=初始值];
变量的分类:
按照位置来分:
局部变量:
在方法内部声明,局部变量必须有初始值,局部变量的生命周期随着方法的调用而产生,随着方法调用结束而结束
全局变量(成员变量、实例变量等):
在方法的外部,类的内部声明
数据类型:
基本数据类型(8种)
数值型
整数型:byte、short、int(默认)、long
浮点型:float、double(默认)
字符型:char:
2个字节,其值用'引起来,Unicode编码 \u四位十六进制的数据
取值范围: 0~65535
\:转义符号
布尔型:boolean: true、false
引用数据类型
数组
类
接口
枚举
注解
运算符:
算术运算符:+、-、*、/、%、++、--
运算符的结果:与表达式中操作数数据类型最大的相一致
%:结果的正负号与被除数的正负号一致
++(--):如果作为表达式的一部分
前置(++i):先自加后运算
后置(i++):先运算后自加
+:
加法:+的左边或者右边都是数值型的数据
连接:+的左边或者右边至少有一个是字符串,则做连接运算,组成更大的字符串
比较运算符:==、!=、>、>=、<、<=
逻辑运算符:&、|、!、^、&&、||
操作数必须是boolean值
位运算符:&、|、~、^、>>、<<、>>>
赋值运算符:=、+=、-=、*=、/=等
优先级: () .
一元运算符>二元运算符>三元运算符
原码、反码、补码:
1)计算机识别的是补码
2)正数原码反码补码都相同
3)负数反码是原码取反(1->0,0->1),补码=反码+1
基本数据类型数据类型转换:取值范围
自动转换 小--->大
强制转换 大--->小 (目标类型)
byte
char int long float double
short
算术运算符(+、-,+=、-=除外),byte、short进行操作的时候,结果自动提升为int类型
顺序语句:
控制语句:
条件判断:
if语句:
1)if(布尔表达式){//表达式为true时执行}
2)if。。。else<==>?:
3)if。。。else if。。else:只执行一种情况
4)以上三种句型嵌套;
if和else配对问题:就近原则
switch语句:用于多条件判断
switch(表达式)
{
case 值1:
语句1;
break;
case 值2:
语句2;
break;
...
case 值n:
语句n;
break;
default:
语句;
break;
}
表达式:数据类型只能是byte/short/char/int/String
值:
1)数据类型只能是byte/short/char/int/String
2)只能是常量或者常量表达式
3)必须是唯一的不重复的
break:可有可无
有:满足条件执行后退出switch语句
无:满足条件(匹配成功)执行后,程序将一路往下执行,直到遇到break为止
default:可有可无,位置任意的,通常在所有的case之后
有:当所有的case都不匹配则执行default的语句
循环语句:代码重复执行
while:先判断后循环,最少做0次循环
初始化部分;
while(条件部分){
循环体部分;//重复代码
迭代部分;
}
do...while:先循环后判断,至少做一次循环
初始化部分;
do{
循环体部分;
迭代部分;
}while(条件部分);
for:
for(初始化部分;条件部分;迭代部分){
循环体部分;
}
foreach:
多重循环:
break:中断循环
break:中断break所在的当前循环
break label(了解):中断退出label处的循环
continue:结束本次循环,继续下一次循环
continue:结束continue所在的本次循环,继续continue所在循环的下一次循环
continue label(了解):结束label处的本次循环,继续label处的下一次循环
SYstem.exit();//退出Java虚拟机,0是正常退出,-1是异常退出,正常程序运行结束后会自动执行正常退出.
****************************
short s1=12;
s1+=1; √
s1=s1+1; ×
short和byte在运算时会自动转换成int型进行运算
原因:
1)+:在编译器将右边的表达式结果计算出来后,和左边的变量类型比较精度,如果左边的变量精度低于右边的结果的精度,编译器会显式的报错,告诉程序员去强制转型.(所以s1=s1+1出错)最后将表达式的结果复制到变量所在的内存区。
2)+=:编译器自动隐式直接将+=运算符后面的操作数强制装换为前面变量的类型,然后在变量所在的内存区上直接根据右边的操作数修改左边变量内存存储的二进制数值(所以s+=1不报错)最后达到和赋值运算符相同的目的.与前者相比,由于后者是位操作,效率也较前者高.
boolean flag=true;
if(flag=false)
{
System.out.println("1");
}else
{
System.out.println("2");
} //结果输出为2,if条件里先赋值再判断
switch语句:用于多条件判断
int n=5;
switch( n )
{
case 3:
System.out,println("3");
break;
case 5:
System.out,println("5");
case 4:
System.out,println("4");
break;
default:
System.out,println("default");
break;
}
执行以上代码输出的是5和4,注意case条件只会匹配一次,上面代码case已经在 case 5处匹配过一次,那么后面的case的条件不会再去匹配,但是case条件下的语句会被执行,知道遇到break或者该switch语句结束为止;同理,如果将case 5用default代替,那么会执行default之后的语句,直到遇到break或者switch结束为止