1 .Java源文件:*.java,保存原始java代码
编译过程:javac 要编译的源文件->.class文件(二进制文件).给JVM阅读的
解释过程:java主类名
向主方法传递多个参数java启动的主类名 参数1 + 空格 + 参数2 ...
编译过程支持中文:javac -encoding UTF-8 主类名.java
2..标识符与关键字
2 .1 java注释
单行注释 : //
多行注释 :/* */ (不推荐)
文档注释 :/** */(用于方法与类之上描述其作用)
/**
注释内容
*/
2 .2 java标识符
-
表示符由字母,“数字”,“_”所组成、$所组成,其中不能以数字开头,不能用Java中的保留字(关键字)
-
标识符采用有意义地方简单命名
驼峰命名法:
-
方法,变量(小驼峰):标识符有多个单词组成,第一个单词的首字母小写,带二个之后的单词首字母大写。eg:myFunction(),myFirstInt;
-
类(大驼峰):类名是以大写字母开头的名词,如果类名由多个单词组成,则每个单词首字母大写。Java源文件文件名必须与公共类(public class)的名称相同。eg:class FirstDemo
-
常量:命名全大写,多个单词间以"_"分隔。eg:MY_STRING
3 .数据类型划分
程序时一场数字游戏
3 .1基本数据类型(8大基本数据类型)
3 .1.1数值型
整形:byte—1字节[-128~127],short,int—4字节[-2^31~2^31-1],long—8字节[-2^63~2^63(java编译器)](默认值为0)
浮点型:double,float(默认值为0.0)
3 .1.2字符型
char(默认值为‘\ u0000’)
3 .1.3布尔型
boolean(默认值为false)
数据类型的使用:
-
描述整数就有int,小数就用double
-
long一般就用于描述日期、时间、内存或文件大小(字节)
-
如果要进行编码转换或者进行二进制流的操作,使用byte[-127~128]
-
char一般用于描述中文(基本忽略)
3 .1.4在Java程序中,任何一个整形常量都是int类型
所有程序从右向左执行
最大值加一,最小值减一 最高位取反
3 .1.5在Java中声明一个long型常量,数字后加上一个l或L(推荐)
面试小题:System.out.println(11+1l); //12
大数据类型与小数据类型做数值运算时,小的数据类型会自动转为大的数据类型,无序强转
eg:long num1=maxValue+1L;
eg:long num1=(long)maxValue+1; 这里long相当于声明
大数据类型转为小数据类型必须强转,可能会丢失内容
整形直接量:只要整型直接量与整型变量匹配,就可以直接将整型直接量赋值给该整型变量。如果直接量太大,超出该变量的存储范围,就会出现编译出错
例外:byte与int类型转换 ****
整形常量赋值给byte变量时,若常量值在byte类型保存范围中可以直接赋值无须强转;整形变量无论是否在byte类型的保存范围中,一律需要强转
eg:
byte b1=120;//OK
int num1=120;
byte b2=num1; // error,必须强转
byte b3=130;// error ,超出byte范围,需要强转
整形直接量:只要整型直接量与整型变量匹配,就可以直接将整型直接量赋值给该整型变量。如果直接量太大,超出该变量的存储范围,就会出现编译出错
byte b1=300;
输出为44,取了底层的8位
3 .1.6小数默认为double类型,要声明float类型,需要在浮点数常量后边加f或F
float f1=10.2F;
float f2=(float)10.2;//强转
3 .1.7所有数据类型的默认类型必须结合类(new Test().age)来观察,主方法中数据类型不存在默认值,
3 .1.8字符型char(\u0000),char与int可以互相转换,‘ ’表示字符
char c =10;
//jvav中不相等,c中回去试试
if(‘0’==0){
//.....
}
3.1.9布尔型(true,false)
- 6个数值型,1个字符,1个布尔
- 表示真假不用0,1,真为true假为false
3 .2引用数据类型
- 数组,类,接口(默认值为null)
- 初见String类-默认null
- 字符串常量用“ ”表示
- 在java中String优先级比较高,与任何奇特数据类型做“+”操作,首先会将其他数据类型转化成String类,再做拼接
Java运算符
- 自增自减
- 三目运算符:布尔表达式?数值1:数值2;
- 逻辑运算符(四个)
- 逻辑或:| (多个表达式都需要判断)
- 短路或:|| (当多个条件有一个返回为true,剩余条件不用判断)(推荐)
- 短路:一旦能够准确无误的确定整个表达式的值,就不在计算表达式余下的部分
- 位运算符:(|,&,^,~,>>, <<)
2>>4 //0
2<<4 //32
- java中增加了一种“无符号”右移操作符(>>>),它使用“零扩展”:无论正负,都在高位插入0
- 一元加减操作符(+-)和二元加减操作符(+-)的符号相同
eg.一元加减操作符:x=-a;二元加减操作符:x-=a;
- 一元操作符(~)一元操作符不可与“=”联合使用
Java程序结构
分支结构
switch(字符|数值|枚举|String){
case a:
..
default:
..
}
没有break语句,switch会运行满足条件的所有分支。
for循环语法:
for(循环初始化;循环结束判断;修改循环结束条件){
循环体;
}
执行顺序:①循环初始化②循环结束判断③循环体④修改循环结束条件
Java中方法的定义和使用(直接在主方法中调用)
public static 方法返回值 方法名称(【参数类型 参数值 ...】){
方法体代码
【return 返回值】;
}
void声明的方法没有返回值,可以与return语句来结束调用
Java方法只有值传递
方法重载(重要)这就是不论在print函数中扔啥都可以的原因
定义:在一个类中,方法名称相同,参数的个数或者类型不同(参数顺序),与返回值无关!!!
顺序不同,其余相同,严格来说不算重载
编码规范:重载的方法返回值一定相同;
方法递归
Java数组 一组相关类型变量集合,可以通过统一方法来操作(引用数据类型)
1.数组动态初始化
数据类型[] 数组名称=new 数据类型[长度]
eg:
int[] data=new int[5];
a.数组元素访问通过索引完成.下标默认从0开始, 如果索引下标超过数组长度,会抛出数组越界异常(运行时异常)
b.动态初始化后的数组,每个元素都有其默认值。
c.查看数组长度 数组名称.length
d.数组遍历推荐使用for-each循环(只限于读取数据,修改数组内容还是用原来的for循环)
for(int temp : data){
System.out.print(temp+",");
}
1.数组引用传递
data为数组引用
引用:堆内存的别名,4字节,在栈上分配空间,指向一块堆内存的地址
2.数组静态初始化
简化格式(过眼烟云)
数据类型[] 数组名称={值1,值2,...}
完整格式(推荐)
数据类型[] 数组名称=new 数据类型[]{值1,值2,...}
数组长度在数值定义后固定,不可变。
匿名数组
二维数组(开发几乎不用,应对笔试题,数据结构)
动态初始化
数据类型[][] 数据名称=new 数据类型[行个数][列个数];
静态初始化
数据类型[][] 数组名称=new 数据类型[][] {{第一行值},{第二行},...}
数组和方法的互操作(重点)
1.方法接受数组
2.方法返回数组
3.方法修改数组
Java对数组的支持
1.排序
java.util.Arrays.sort(数组名称);
import java.util.Arrays;
Arrays.sort(数组名称);
支持8大基本数据类型,默认升序排序,内部采用双轴快速排序
2.数组部分拷贝
System.arraycopy(源数组名称,源数组开始点,目标数组名称(修改后的数组),目标数组开始点,拷贝长度)
3.数组全拷贝(重要)
java.util.Arrays.copyOf(原数组名称,新数组长度) :int[] (返回一个新数组)
Java类集动态扩容就采用此方法。