java基本语法
java编程应该注意
- java是大小写敏感
- 类名:类名的首字母应该大写
- 方法名:应该小写字母开头
- 源文件名必须和类名相同
- 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行。
Java标识符
java 中 变量,方法 类都需要名字,我们统称为标识符,标识符需要注意一下几点
- 所有标识符都需要以字母(A-Z或a-z),美元符号$,或者下划线_开始
- 首字母之后可以字母(A-Z或a-z),美元符号$,或者下划线_数字的任意组合
- 关键字不能作为标识符
- 标识符是大小写敏感的
java 变量
局部变量:在方法,构造方法或语句块中定义的变量是局部变量,变量的声明和初始化都是在方法中,方法结束后变量就会自动销毁
- 访问修饰符,不能用于局部变量
- 局部变量在栈上分配
- 局部变量没有默认值,所以局部变量被声明以后,必须经过初始化才能使用
类变量(静态变量):声明在类中方法体外,但必须声明static类型
成员变量:成员变量是定义在类中,方法体外,在创建对象实例的时候初始化,可以类中方法,语句块,构造方法,访问
java 关键字
java 构造方法
每个类都有构造方法,如果没有显示的定义,那么java编译器会提供一个默认无参的构造方法
java 源程序与编译型运行的区别
java 源文件声明规则
- 一个源文件只能有一个public类
- 一个源文件可以有多个非public类
- 源文件的名称要和public类的名称保持一致
- 如果一个源文件定义在某个包中,那么package语句应该在源文件的第一行
如果源文件包含import语句,应该写在package语句下方类上方 - import语句和package语句对源文件中所有类都有效,不能给不同的类不同的包声明
java 的基本数据类型
java的俩大数据类型
1 内置数据类型
java提供了8种基本数据类型,其中包括6种数字类型(四个整数型,俩个浮点型),一个字符串类型,一个布尔型
类型 | 最小值 | 最大值 | 默认值 | 包装类型 | 介绍 |
---|---|---|---|---|---|
byte | -27 | 27-1 | 0 | Byte | 数据类型8位,有符号,二进制补码表示的整数 |
short | -215 | 215-1 | 0 | Short | 数据类型是16位,有符号的以二进制补码表示整数 |
int | -231 | 231-1 | 0 | Integer | 数据类型32位,有符号的,以二进制补码表示的整数 |
long | -263 | 263-1 | 0L | Long | 数据类型64位,有符号二进制补码表示的整数 |
float | – | – | 0.0f | Float | 数据类型是单精度,32位,浮点数 |
double | - | - | 0.0d | Double | 数据类型是双精度,64位,浮点数 |
boolean | - | - | false | Boolean | 数据类型表示1位的信息,只有俩个取值true和false |
char | \u0000(即为0) | \uffff(即为65,535) | ‘\u0000’ | Character | 是一个单一的16位Unicode字符 |
基本数据类型的特殊性
我们在程序中经常用到基本数据类型,他们需要我们特殊对待,之所以特殊对待是因为,new的对象都存储在堆里,因此new一个特别小的对象往往不是很有效,因此基本数据类型不用new来创建变量,而是创建一个并非是引用的"自动"变量,这个变量直接储存值,并放入栈中,因此更加高效
引用数据类型
对象,数组都是引用数据类型
引用数据类型的默认都为null
java 常量
常量在程序运行时不能被更改,用final修饰
自动类型转换
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
不能对boolean进行类型转换
不能吧对象类型转换成不相关的类型
把容量大转化为容量小的类型需要用强制转换
转换过程可能导致精度丢失
浮点数到整数,是通过舍弃小数得到,而不是四舍五入
如果转换前数据类型的位数,低于转换后的数据类型的位数,就可以自动转换到高位
==比较引用,equles比较值
java 修饰符
访问修饰符
可以用访问修饰符,对类,变量,构造方法,进行保护
default(默认修饰符,就是什么都不写),同一包内可以访问,不适用任何修饰符
privite 同一类内可以访问,
public 对所有类进行访问
protected 对同一包内的类,和所有子类可见(不能修饰外部类)
非访问修饰符
static final abstrct 等
java 运算符
1、前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。
2、后缀自增自减法(a++,a–): 先进行表达式运算,再进行自增或者自减运算
位运算符
学
java 循环
while循环
do…while 循环:
do {
//代码语句
}while(布尔表达式);
do…while 如果布尔为false至少执行一次,如果布尔为true,则一直执行代码语句
for循环:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
for(;;)无穷循环
最先执行初始化步骤,可以声明一种类型,但可以初始化一个或多个循环控制变量,也可以是空语句
然后检测布尔表达式的值,如果为true 循环体被执行,如果为false,循环终止,开始执行循环体后面的语句
执行完一次循环体后,更新循环控制变量
再次检测布尔表达式,循环上面的过程
java 增强for循环
break:跳出最里层循环
continue 适用任何循环控制结构,作用立即进行下一次的循环
java 方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
java 加载顺序
现在new一个Dog的对象假如没有继承
- 首次创建Dog对象或者访问Dog的静态成员方法时,载入Dog.class
- 初始化静态变量和静态代码块
- new Dog时,在堆上分配足够的空间
- 初始化成员变量,代码块
- 调用构造器
假如有继承
public class A {
public static int a = print("我是A的静态变量");
public int i = 11;
public A() {
print("我是构造器" + "i=" + i);
i=88;
}
public static int print(String s) {
System.out.println(s);
return 42;
}
}
public class B extends A {
public static int b = print("我是B的静态变量");
public int j = 55;
public B() {
print("我是B的构造器j=" + j);
print("我是B的构造器i=" + i);
}
public static int print(String s) {
System.out.println(s);
return 42;
}
public static void main(String[] args) {
System.out.println("调用了main方法");
B b = new B();
}
}
我是A的静态变量
我是B的静态变量
调用了main方法
我是构造器i=11
我是B的构造器j=55
我是B的构造器i=88
看到输出我们可以得到
- 现加载父类的class,初始化父类的静态变量
- 在加载子类的class,初始化子类的静态变量
- 先new父类对象,再new子类对象
Java异常
Throwable这个java类被用来表示任何可以被抛出的类,Throwable可以分为俩类
- Error用来表示编译时和系统错误(除特殊情况外,一般不用我们关心)
- Exception 是可以被抛出的基本类型,在Java库,用户方法以及运行时故障中都可能抛出这个异常,所以程序员主要关系你的是Exception
特例RuntimeException,运行时异常
- 运行时异常会自动被java虚拟机抛出,不用我们在代码里写,比如经常见的NullException等
- 这些异常都是从RuntimeException中继承出来的