1、注释、标识符、关键字
注释
- 类似写代码的时候的笔记,帮助对代码的理解
- 不会被执行
- 书写注释是一个非常好的习惯
- java中注释分类
- 单行注释
- 多行注释
- 文档注释
拓展:百度搜索有趣的代码注释
标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被成为标识符。
- 所有的标识符都应该以字母(A-Z或者a-z),美元符号($)、下划线(_)开始
- 首字符之后可以是字母字母(A-Z或者a-z),美元符号($)、下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或者方法名
- 标识符是大小写敏感的
- 合法标识符举例:
age、$salary、_value、__1_value
- 非法标识符举例:
123abc、-salary、#abc
- 可以使用中文,但是不建议,也不建议用拼音
关键字
2、数据类型
- 强类型语言
- 要求变量的使用要严格符合规定,所有的变量都必须先定义后才能使用
- 安全性高、速度稍慢
- 弱类型语言
Java是强类型语言
Java的数据类型分为两大类
- 基本类型(primitive type)
- 引用类型(reference type)
基本数据类型
整数型默认:int
浮点型默认:double
补充:
什么是字节?
- 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数。
- 字节(byte):是计算机中数据处理的基本单位,习惯上用大写的B来表示,1B(字节)=8bit(位)
- 字符:是指计算机中使用的字母、数字、字、和符号,比如“中”、“国”这种单个的字。
整数拓展:进制
- 二进制:前缀0b,如0b10表示十进制的2
- 八进制:前缀0,如010表示十进制的8
- 十进制
- 十六进制:前缀0x,如0x10表示10进制的16
浮点数拓展:银行业务怎么表示?
//现象1 float f = 0.1f;//0.1 double d = 1.0/10;//0.1 System.out.println(f==d);//结果是false //现象2 float d1 = 2312321231231231231f; float d2 = d1 + 1; System.out.println(d1==d2);//结果是true /* 结论: 1.不要用浮点型进行比较,浮点型是有限的、离散的,有舍入误差,他接近但是不等于。 2.银行业务中要使用BigDecimal类来处理。 */
字符拓展
char c1 = 'a'; char c2 = '中'; System.out.println(c1);//输出:a System.out.println((int)c1);//输出:97 System.out.println(c2);//输出:中 System.out.println((int)c2);//输出:20013 /* 结论: 1.所有的字符本质还是数字。 2.Unicode编码表: 如97=a,中=20013 占2字节 范围:0-65536 */
转义字符
字母前面加上捺斜线""来表示常见的那些不能显示的ASCII字符.称为转义字符.如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。/斜线与\反斜线
- / 斜线, slash或又称为forward slash (前斜线), 原本是标点符号。 起源于古罗马,中世纪时用作逗号(而当时的双斜线//是被当作连接号的,后来演化成等号=)。
- a) 英语里的斜线, 最常用的即使替代字符“or”表选择, 比如: Yes/No; 还有就是避免名字的冲突,比如美国的人口普查表中有"Assyrian/Chaldean/Syriac", 就是为了避免因Syriac名字不同叫法而产生的冲突或歧义,其实也是or的含义;
- b) 算术; 英文里面称over, 比如: 123/456,也即分数
- c) 金钱表示。 $50/- 表示50美元上限, 后面没有了,防止有人添加修改。
- d) 日期的表示
- \ backslash, 反斜线, 主要用于电脑中, 也正是对普通/斜线的借鉴。 操作系统(xNix), 电脑语言(C/C++, Perl),编码(部分Unicode)等都使用它。
额外拓展,之后学习。需要从对象、从内存分析
String sa = new String("hello"); String sb = new String("hello"); System.out.println(sa==sb);//输出:false String sc = "hello"; String sd = "hello"; System.out.println(sc==sd);//输出:true
布尔值
boolean flag = true; if(flag == true){} if(flag){} //Less is More!代码要精简
3、类型转换
由于Java是强类型语言,所以在进行有些运算的时候,需要用到类型转换。
运算中,不同类型的数据线转化为同一类型,然后进行运算。
低 -------------------------------------------> 高
byte,shory,char -> int -> long -> float -> double
强制类型转换:由低转高
自动类型转换:由高转低
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在吧高容量转换到低容量的时候,强制转换
- 强制转换的时候,可能会存在内存溢出,或者精度问题,如:
- 内存溢出:(byte)128,byte范围是-128~127之间
- 精度丢失:(int)23.5,(int)33.4f
补充:
JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000; System.out.println(money);//输出1000000000
计算一下自己200亿的年薪
int money = 10_0000_0000;//幻想年薪 int year = 20;//工作时长:年 int total1 = money * year; System.out.println(total1);//输出:-1474836480 //上述内存溢出,尝试修改接受类型为long再试试 long total2 = money * year;//修改接受类型为long System.out.println(total2);//输出:-1474836480 //上述修改为long接收后还是会溢出 //是因为在money与year计算的时候已经溢出,再将溢出结果转换为long还是不能得到正确的结果 long total3 = money * (long)year;//在计算前,将year强制转换为long类型 System.out.println(total3);//输出:20000000000
3. 定义long类型的时候,数字后面尽量使用大写的L
```
```java
long money1 = 100l;//小写的L有点像数字1,尽量避免这样写
long money2 = 100L;//大写的L,一目了然,推荐
```
4、变量、常量
变量
变量是什么
可以变化的量。可以理解为内存中一个空间,里面可以放不同的东西。
Java是一种强类型语言,每个变量都必须声明其类型。
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
type varName [=value] [{,varName[=value]}];
数据类型 变量名 = 值;
可以使用逗号隔开来生命多个同类型变量,但是不推荐。
变量作用域
- 类变量
- 实例变量
- 属于对象
- 如果不自行初始化,就是类型的默认值。
- 数值型:0或者0.0
- 布尔型:false
- 其他类型(除了基本类型之外的):null
- 局部变量
代码举例:
public class Variable{
static int allClicks = 0; //类变量,有static关键字修饰
String str = "hello"; //实例变量
public void method(){
int i = 1; //局部变量
}
}
注意:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符。
- 变量声明是一条完整的语句,因此每个声明都必须以分号结束。
常量
什么是常量
-
常量(Constant):初始化(initialize)后不能再改变值,不会变得值,Java中使用final关键字修饰。
-
所谓常量可以理解成一种特殊的变量,他的值被设定后,在程序运行过程中不允许被改变。
final 常量命 = 值; 例:final double PI = 3.14;
-
常量命一般都使用大写字符,单词之间以下划线分割。
变量的命名规范
-
所有变量、方法、类名:见名知意
-
类成员变量:首字母小写 + 驼峰原则
-
驼峰原则:第一个单词首字母小写,后面的单词首字母大写,如monthSalary
-
-
局部变量:首字母小写 + 驼峰原则
-
常量:大写字母和下划线,如MAX_VALUE
-
类名:首字母大写 + 驼峰原则,如Man,HelloWorld
-
方法名:首字母小写 + 驼峰原则,如run(),findAll()
5、运算符
Java语言支持如下运算符
算数运算符
+,-,*,/,%,++,--
算数运算符中,如果有Long类型,结果就为Long类型,否则就是Int类型。
long a = 123141241235L;
int b = 123;
shrot c = 10;
byte d = 8;
System.out.println(a+b+c+d);//返回Long类型
System.out.println(b+c+d);//返回Int类型
System.out.println(b+c+d);//返回Int类型
//算数运算符中,如果有Long类型,结果就为Long类型,否则就是Int类型。
补充:
-
++和–
-
i++:先赋值,后自增
int a = 1; int b = a++;//先把a赋值给b,然后a再自增,这行代码执行完成后,a=2,b=1
-
++i:先自增,后赋值
int a = 1; int b = ++a;//a先进行自增,再把a自增后的值赋值给b,这行代码执行完成之后,a=2,b=2
-
-
幂运算
例如2的3次方,可以使用Math类来计算。
double pow = Math.pow(2,3); System.out.println(pow);
-
字符串连接符 +
int a = 10; int b = 20; System.out.println(a+b+"");//结果输出30 System.out.println(""+a+b);//结果输出1020
赋值运算符
=
符号
int a = 10;//将10赋值给变量a
关系运算符
/*
>,<,>=,<=,!=instanceof
关系型运算符的返回值为布尔类型。
*/
逻辑运算符
- 逻辑与(&&):两个变量都为真,结果才为真。
- 逻辑或(||):只要有一个变量为真,结果就为真。
- 逻辑非(!):如果为真,则结果为假;如果为假,则结果为真。
逻辑运算符有短路功能。
与运算:若第一个变量为假,则直接返回假。
或运算:若第一个变量为真,则直接返回真。
位运算符
位运算效率极高!!
/*
A = 0011 1100
B = 0000 1101
--------------------
A&B = 0000 1100 与:对应位置同时为1则为1,否则为0
A|B = 0011 1101 或:有1则为1
A^B = 0011 0001 异或:两个位置,相同则为0,否则为1
~B = 1111 0010 取反:相反
2*8 = 16 2*2*2*2
左移:<< *2 左移表示乘2
右移:>> /2 右移表示除2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
2<<3结果是16
*/
System.out.println(2<<3);//输出16
条件运算符
//x ? y : z
//如果x==true,则结果为y,否则结果为z
int score = 80;
String type = score < 60 ? "不及格":"及格";
System.out.println(type);//输出结果"不及格"
扩展赋值运算符
4个拓展运算符:+=,-=,*=,/=
int a = 10;
int b = 20;
a+=b;//等价于a = a + b;
a-=b;//等价于a = a - b;
运算符的优先级
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。表 1 列出了所有的运算符的优先级以及结合性。
使用优先级为 1 的小括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来。
6、包机制
-
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
-
包语句的语法格式为:
package pkg1[.pkg2[.pkg2...]]; 例:package com.luhan.util;
-
一般利用公司域名倒置,作为包名。如百度,com.baidu.www。
-
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用import语句导入。
//格式:import package1[.package2...].(classname|*); //例如 import java.util.Date; import java.util.*;
推荐阅读:《阿里巴巴Java开发手册》
7、JavaDoc
-
javadoc命令是用来生成自己API文档的
-
参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
-
使用idea生成
Tools->Gerenate JavaDoc Other command line arguments:-encoding utf-8 -charset utf-8