一.java的特性
- java语言由JamesGosling和BillJoy 的指导下由Sun公司开发的。
- java是编译语言也是解释语言 java源代码----> 字节码--->java运行时解释器执行
- java指定所有基本数据类型的大小
- 除基本数据类型为,java中所有对象都可以通过引用来访问(一种‘安全性指针’,不能进行算数运算)
- Java所有操作都是传值操作
- java 不支持默认参数
- java是面向对象语言,代码的基本单位是类
1 类的组成:
1.数据项(也称变量/字段) 2. 函数(也称方法)
2.一个类可以创建不同的对象,每个对象都是同一个类的实例. 类相当于模板,对象相当与通过模板制作出的个体
3.通过引用访问对象, 类类型的变量即为对象的引用 A obj1 = new A(); //变量obj1就是对new所创建的对象的引用
4.一个类可以有多个子类,但只能有一个父类(超类),唯一例外 Object类,它无父类
- 不允许自定义操作符重载,java中唯一重载的运算符 ‘+’,用于字符串连接 ,和算数加法运算
- 没有源代码预处理器,因此没有 宏、#define 语句或条件编译
- main() 方法是应用程序的入口,每个java应用至少包含一个带有main()方法的类
- 项目名全部小写 包名全部小写
类名首字母大写,每个单词的首字母都要大写。
变量名、方法名首字母小写,每个单词的首字母都要大写。
5、 常量名全部大写
如:public static final String GAME_COLOR=”RED”; - 以{ } 分割代码块
- java的安全模型
从内到外 :1.java二进制码 java运行时系统中固定的部分
2.字节码校验器(静态的校验 一种数学“定理证明机”)
3类加载器 负责将一个或多个java类的字节码置入解释器中
4.安全性管理器()
5系统资源(应用级:文件系统、网络端口、窗口环境)
二.java的数据类型 运算符
0注释
// 单行注释
/* 多行
注释
*/
/**
* 块注释 (文档注释)
*习惯每行以*开头
*有java SDK的javadoc程序抽取并将其生成产HTML文档 前导的空格和*都会被忽略
*文档注释可以出现在类 方法 变量 定义之前
* 说明 应用于 作用
*@see 相关类名 类 方法 变量 建立指向相关类文档的超文本链接
*@author 作者名 类 标记作者
*@version 版本 类 标记版本
*@param 参数名和描述 方法
*@return 返回值描述 方法
*@exception 异常名和描述 方法
*@deprecated 声明某项过时 类 方法 变量
*@since 在添加项的时候提示API版本 变量
*以@开头的行解释为针对文档生成器的特殊指令
*/
1.数据类型
数据种类 分为两种 1.基本类型 2. 引用类型
按值传递
类型 | 定义 |
boolean | true 或 false |
char | 16位Unicode字符 (2字节的无符号整数) |
byte | 8位有符号的二进制整数 |
short | 16位有符号的二进制整数 |
int | 32位有符号的二进制整数 |
long | 64位有符号的二进制整数 |
float | 32位IEEE754 浮点值 |
double | 64位IEEE754浮点值 |
变量
以字母开头,可由字母 数字 _ $ 构成,不能与关键字重复
2.语句
声明
类型名 变量名空格隔开 int a;
初始化 :在声明的同时将其赋值
int a = 0+5;
int oct = 0123;//指定8进制数 以0开头
int hex = 0xFFFF; //指定16进制数 以0x或0X开头
int bin = 0b10100101; //指定2进制 以0b或0B开头
boolean flag = true;
1. 小数默认类型是double 对于float类型需要用F或f显示的指明
float f = 3.54f;//f或F 必须
double do = 13513.153135;
2. 类型转换
- java中出现的整数(整数直接量)如 0 100 121 -5 默认为int类型
- 故声明byte short long是需要显示的类型转换
- 当范围小的类型赋值给大范围的类型时,自动往大类型的方向转换 即隐式类型转换
- boolean不参与类型转换
- 在整数直接量中可以使用_下划线 分割数字
long x = 1010_1515;// 出现隐式类型转换 (默认的)int型转换成long
long l = 1E9L;//L或l 必须 为与1进行区分 建议使用L 指明这个整数位long类型
short s=(short)500
byte b=(byte)2;
3.关于字符型
1. char 字符直接量必须在''内 可以为字母 数字 字符
char c = 'a';
char b = '好';
char x = 0x9a12;//按照十六进制的方式
char d = '\u122c';//按照Unicode字符形式
2. 转义序列:\uxxxx(x为16进制)Unicode编码序号 和 特殊字符的转义 如:\b \n \' \" \\
Unicode转义序列会在解析代码之前的到处理(包括注释中的)
如 "\u0022+\u0022" 其结果为"" 并不是"+" (\u0022 为")
// \uers
得到:“ java:非Unicode转义” 的编译错误
声明 赋值 if ;if else;if elseif else; for; while;do while;switch;break;continue;//与c同
try catch 和finally ;// ..
不可达语句 编译时出错
//不可达语句 编译时出错
if(1<2)
return;
表达式 的值
数字类型 (算术表达式)
引用类型(对象分配)
void(不返回任何值得方法)
3.运算符
算术:char byte short int long float double
整型:char byte short int long
优先级 | 操作符 | 操作数类型 | |
1 | ++ -- + - | 算术
| 自增 自减 单目加 单目减 前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。 后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算 |
1 | ~ | 整型; | 按位取反 |
1 | ! | 布尔; | 逻辑取反 |
1 | (type) | 任何类型 | 类型转换 |
2 | * / % | 算术 | 乘除 加减 |
3 | + - | 算术 | 加法和减法 |
3 | + | 字符串 | 字符串连接 |
4 | << >> | 整型 | <<左移 高位舍弃,低位补0 右移(有符号扩展的右移, 低位舍弃,高位补符号位) 位运算 |
4 | >>> | 整型 | 无扩展的右移(高位补0,) 位运算 |
5 | instanceof | 对象 | 类型比较 子类是父类的类型,但父类不是子类的类型 |
5 | < > <= >= | 算术 | 运算 大于 小于 小于等于 大于等于 关系运算 |
6 | != == | 基本类型 | 不等 等于 (基本类型时:判断变量内容是否相等) 关系运算 |
6 | != == | 对象 | 引用的相等和不等 (对象时:判断变量引用对象的内存地址是否相同) |
7 | & | 整型 或布尔 | 按位与 逻辑与(AND) |
8 | ^ | 整型 或布尔 | 按位异或 逻辑异或(XOR) |
9 | | | 整型 或布尔 | 按位或 逻辑或 (OR) |
10 | && | 布尔 | 条件与 逻辑运算符 (特性: 短路) |
11 | || | 布尔 | 条件或 逻辑运算符 (会短路 如: x||y 若x为true,则编译器将不看y的值 ,仅计算第一个值,仅当有必要时才计算第二个操作数的) |
12 | ? : | N/A | 三门运算符 条件运算符 |
13 | = + = - = * = / =%= >> = << =&= ^ = | = | 任何类型 | 赋值 |
关于关系运算符 ==
//情况1 基本类型 看值
int i = 2;
int j = 2;
System.out.println( i==j ); //true
//对象以String为例
//1 将直接量赋给String
String str = "AB";
String str1 = "AB";
System.out.println( str==str1 ); //true
//2 以new创建
String strNew = new String("AB");
String strNew1 = new String("AB");
System.out.println( strNew==strNew1 ); //fasle
System.out.println( str == strNew ); //false
//结论: "==" 比较的是变量名的值,所谓变量名的值可以理解为变量名存储变量的地址
//直接量赋给String时,相同直接量存储的地址相同
//使用new将会在Heap堆申请一块新的内存来创建对象
//以数组为类
int []iArray = new int []{1,2};
int []iArray1 = new int []{1,2};
int []iArray2 = iArray;
System.out.println( iArray == iArray1 );//false
System.out.println( iArray == iArray2 );//true