Java基本语法

标识符
概念
Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符
规则
1.标识符由字母,下划线,美元符或数字组成
2.标识符应由字母,下划线,美元符开头
3.Java标识符大小写敏感,长度没有限制
注:Java标识符要见名知意,且不能与关键字重名
关键字
概念
Java中一些赋以特定含义,拥有特殊用途的字符串叫做关键字,所有的Java关键字都是小写英文,关键字大写后不再被当作关键字。
关键字的分类
用于控制访问相关4个:public(公共的)、protected(受保护的,同一个包中的其它类及子类可以访问。)、 缺省的、 private(私有的,本类可以访问)
修饰符与包及类之间的关系以及访问关系:
public protected 缺省 private
本类 可以 可以 可以 可以
同包子类 可以 可以 可以 不可以
同包非子类 可以 可以 可以 不可以
不同包子类 可以 可以 不可以 不可以
不同包且非子类 可以 不可以 不可以 不可以
类、接口、抽象类相关、实例化对象相关6个:abstract(抽象的)class(定义类)、interface(定义接口)implements(实现)、extends(继承)new(创建新对象)
程序控制相关12个:if(如果)、else(否则) 、instanceof(判断一个对象是否是某个类的实例)switch(开关)、case(switch语句的一个条件)、break(跳出循环/跳出switch语句块)、default(switch语句的默认分支,当所有的case都不满足条件时会执行)for(for循环语句)、do(循环语句,循环体至少会被执行一次)、while(当…时)、continue(结束本次循环,继续下一次循环)return(返回…,用于跳出方法)、
修饰方法,变量方法相关8个:static(静态的)、final(最终的不可被改变的)、const(const是Java预留关键字,用于后期扩展用,用法跟final相似,不常用)native(表示方法用非java代码实现)synchronized(线程同步的)transient(修饰不要序列化的字段)volatile(标记字段可能会被多个线程同时访问)strictfp(严格的/精准的)
异常处理相关5个:try(捕获异常)、catch(处理异常)、finally(有无异常都会执行)throw(抛出一个异常对象)、throws(声明一个方法可能抛出异常)
包相关2个:import(引入包)package(定义包)
数据类型相关8个:8种基本数据类型:byte、short、int、long、float、double、char、boolean
变量引用相关3个:super(调用父类的方法/构造函数/成员变量)this(表示调用当前实例的成员变量或方法/调用另一个重载的构造函数)void(没有返回值)
其他相关2个:assert(断言条件是否满足,满足则继续向下执行,不满足则抛出异常终止执行)、enum(枚举类型)
保留字:goto const false true。
常量
Java的常量值用不同的数据类型字符串表示,
比如:整数型:123 ;字符常量 ‘a’ ;逻辑常量:true;字符串常量:“Hello World”。
变量
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
Java中每一个变量都属于特定的数据类型,在使用前必须申明变量类型:
int i = 1;
float f = 12.3f; //注意float a = (float)1.3;或者float a = 1.3f;(f或F都可以不区分大小写)
double d=1.3; //注意和单精度浮点数float区分
String name ="hello world";
变量的分类
按声明位置划分
局部变量:在方法或者语句块内部定义的变量
成员变量:在方法的外部,类的内部定义的变量
所属数据类型划分
基本数据类型变量
引用数据类型变量
局部变量和成员变量
public class Test{
public int i;//成员变量
public void method(){
int j;//局部变量 局部变量不允许使用访问修饰符修饰
}}
基本数据类型的转换
boolean类型不可转换为其他的数据类型
字符型,浮点型的数据在混合运算中相互转换要准守如下规则
容量小的类型自动转换为容量大的数据类型:
byte,char,short > int > long > float > double
byte,char,short不会相互转换,他们在计算式先转换成int类型
容量大的类型转换成容量晓得类型要加上强制转换符,可能会造成精度降低或者溢出
public class TestConvert {
public static void main(String arg[]) {
int i1 = 123;
int i2 = 456;
double d1 = (i1+i2)1.2;//系统将转换为double型运算 因为小的类型会自动转换为大的数据类型 1.2 默认是double类型
float f1 = (float)((i1+i2)
1.2);//需要加强制转换符 (i1+i2)1.2是double类型,如果用float接受 需要使用强制转换因为 double类型大于float
byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1+b2);//系统将转换为int型运算,需要强制转换符
System.out.println(b3);
double d2 = 1e200;
float f2 = (float)d2;//会产生溢出
System.out.println(f2);
float f3 = 1.23f;//必须加f
long l1 = 123;
long l2 = 30000000000L;//必须加l
float f = l1+l2+f3;//系统将转换为float型计算
long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)
}}
Java运算符分类
算术运算符:+ -
/ % ++ --;
关系运算符:> < <= >= == !=
逻辑运算符:! & | ^ && ||
位运算符:& | ^ ~ >> << >>>
赋值运算符:=
扩展赋值运算符:+= -= /= *=
字符串连接运算符:+
语句
条件语句
if //如果条件为true则执行
if...else //如果if条件为true执行if语句,否则执行else语句
if...else if //同上
if...else if...else if...else //有一条执行就不会再判断后续天剑
switch
swtich()//变量类型只能是int、short、char、byte和enum类型。当进行case判断时,JVM会自动从上到小扫描,寻找匹配的case。
循环语句
for
while
do while
break 语句,终止某个语句块的执行,在循环语句体系中,可以强制退出循环
Continue 语句,跳过本次循环进入下一次循环
数组
定义
dataType[] arrayVar;
dataType arrayVar [ ];
说明: 首先dataType它可以是基本数据类型比如 int array [ ];也可以是引用类型 比如Object [ ]。
方法
方法是语句的集合,它可以实现一个功能,比如println()方法它可以实现打印输出。在java中方法是包含在类或对象中,方法创建于程序中,在其他地方被引用。
定义一个方法
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
//示例
public int addNumber(int a, int b){
int x=0;
x=a+b;
retutn x;
}
定义规则
1、命名规则,方法名一般以小写字母开头,后边的单词首字母大写
2、return后边跟的值的类型必须与返回值类型相同,除了void,因为void是无返回值的。
解析方法
修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没 有返回值。在这种情况下,returnValueType 是关键字void。
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
方法体:方法体包含具体的语句,定义该方法的功能如 int x=0; x=a+b。
main方法
main 方法是被 JVM调用的,除此之外,main 方法和其它方法没什么区别。main 方法的头部是不变的,如下所示,带修饰符 public 和 static,返回 void 类型值,方法名字是 main,此外带个一个 String[] 类型参数。String[] 表 明参数是字符串数组。
public class TestMax {
/* 主方法 /
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
}

/* 返回两个整数变量较大的值 /
public static int max(int num1, int num2) {
return num1>num2? num1:num2;
}
}
构造方法
class Student {
int id;//ID
String name;//姓名
int age;//年龄
Student(String n) {//拥有一个参数的构造方法
name = n;
}
Student(int i, String n) {//拥有二个参数的构造方法
id = i;
name = n;
}
Student(int i, String n, int a) {//拥有三个参数的构造方法
id = i;
name = n;
age = a;
}
public void show() {//普通方法
System.out.println(id + " " + name + " " + age);
}

public static void main(String args[]) {
    Student s1 = new Student("小红");//创建一个小红
    Student s2 = new Student(250, 18);//创建一个
    s1.show();//对象调用方法
    s2.show();
}

}
Java文件经过JVM编译成字节码文件,即.class文件,将字节码文件在不同的操作系统中运行时,操作系统再将字节码文件编译成机器码文件。这就是Java跨平台
首先明确一点,java 的 GC 回收是完全自动的,没有提供相关 api 手动回收,所有的内存分配和回收权限都在 jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:
对于不再引用的对象,及时把它的引用赋为 null。 obj = null;
如果内存确实很紧张,调用 System.gc () 方法来建议垃圾回收器开始回收垃圾,通知 GC 运行,但是 Java 语言规范并不保证 GC 一定会执行。
java 基本类型的默认值和取值范围
整数类型 byte(1 个字节)short(2 个字节)int(4 个字节)long(8 个字节)
字符类型 char(2 个字节)
浮点类型 float(4 个字节)double(8 个字节)
常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。
Java 标识符有如下命名规则:
由 26 个英文字母大小写,数字:0-9 符号: $ ¥ 组成
标识符应以字母、
、$ 开头。
标识符不能是关键字。
抽象类和接口
关于抽象类
JDK 1.8 以前,抽象类的方法默认访问权限为 protected
JDK 1.8 时,抽象类的方法默认访问权限变为 default
关于接口
JDK 1.8 以前,接口中的方法必须是 public 的
JDK 1.8 时,接口中的方法可以是 public 的,也可以是 default 的
JDK 1.9 时,接口中的方法可以是 private 的
装箱和拆箱
基本数据类型转化成包装类是装箱 (如: int --> Integer)。
包装类转化成基本数据类型就是拆箱 (如:Integer --> int)。
包装类就是引用类型,基本数据类型就是值类型。
通过 装箱 和 拆箱 操作,XM代理申请www.kaifx.cn/broker/xm.html,能够在值类型和引用类型中架起一做桥梁。换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够统一考察系统,任何类型的值最终都可以按照对象进行处理。
序列化和反序列化
Java 在序列化时不会实例化 static 变量和 transient 修饰的变量,因为 static 代表类的成员,transient 代表对象的临时数据,被声明这两种类型的数据成员不能被序列化
Java有两种传递方式,值传递和引用传递。基本类型和以string str = “aaa”;这种方式创建的都是值传递,对象创建和数组都是引用传递,所以在函数的判断形参需要特别注意。
Java垃圾回收机制
垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。
年轻代:对象被创建时(new)的对象通常被放在 Young(除了一些占据内存比较大的对象), 经过一定的 Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:就是上述年轻代移动过来的和一些比较大的对象。Major GC (FullGC) 是针对年老代的回收。
永久代:存储的是 final 常量,static 变量,常量池。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章