我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它空虚时,用爱欲来填充; 第三次,在困难和容易之间,它选择了容易; 第四次,它犯了错,却借由别人也会犯错来宽慰自己; 第五次,它自由软弱,却把它认为是生命的坚韧; 第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副; 第七次,它侧身于生活的污泥中虽不甘心,却又畏首畏尾。
标识符
-
float结尾要用f标识,long类型结尾要用L标识
-
byte类型是-128—127
-
因为浮点数是有限且离散的,包含涉入误差,所以尽量避免使用浮点数,银行业务使用的是BigDecimal类(数学工具类)
-
int()等可以进行强制类型转换,依据Unicode字符集(0-65536),excel表格也是0-65536(2的16次方),Unicode本质是一个表,存储着数字与字符的对应关系,将要进行强制类型转换就查询这张表(u0000-uffff)
-
转义字符 如\t 制表符 \n 换行
进制问题
-
八进制开头为0
-
十六进制开头为0x
-
sout出来的值为十进制形式
类型转换
-
强制转换 (int)a
-
自动转换 低到高
-
不能对布尔值进行转换(因为是bool是按位运算)
-
不能把对象类型转换为不相干的类型
-
高容量到低容量只能进行强制转换,期间可能发生内存溢出或者精度
下面的total仍然会溢出,因为两个运算数是int类型,用来存储的临时变量也是int类型,解决方案是long total=money*(long)years;
int money=10_0000_0000;
int years=20;
long total=money*years;
Tips
JDK7新特性,数字内加可以加下划线
变量
-
类变量 在类里,方法外定义,需要加static关键词,从属于整个类,本身是静态的
-
实例变量 同类变量相似,只是不需要加static,从属于对象,不进行初始化的话会有默认值,0、null、false等(除了基本类型其他默认值都是null)
-
局部变量 定义在方法里
-
常量
-
一般用大写字母命名
-
final(类似于const)是一种修饰符,定义常量,修饰符不存在先后顺序
-
-
变量命名
-
常量 大写字母+下划线
-
类名 首字母大写+驼峰原则
-
方法名,类成员变量,局部变量都是首字母小写+驼峰原则
-
驼峰原则:除了第一个单词小写,后面每一个单词首字母大写,如lastName,monthSalary,为的是区分每个单词的位置
-
运算符
-
输出一个short变量和byte变量相加的结果,这个临时变量是int类型
-
进行运算时,可以用Math类调用类方法进行数学运算
-
运算短路
-
int c=5;
system.out.print((c<4)&&(c++<4)); -
因为已经判断c<4;后面的语句将不再被执行,c仍然是5
-
-
位运算 移位运算 :2<<3相当于2*8
包机制:package
-
包的本质是一个文件夹,类似于一个作用域
-
一般利用公司域名倒置作为包名com.zhang.www(三级逐渐向下)
-
想要使用使用其他包的内容,需要导入(import)那个包(include头文件)
JavaDoc生成文档
-
JavaDoc命令是用于生成自己的API
-
分为注释类和注释方法两种类型
package Demo;
/**
* @author hechongwei
* @version 1.0
* @since 1.8
*/
public class Demo02 {
String name;
/**
*
* @param name
* @return
* @throws Exception
*/
public String text(String name) throws Exception{
return name;
}
} -
生成javadoc文档
-
在类文件目录下打开控制台,输入javadoc -encoding UTF-8 -charset UTF-8 +文件名即可自动生成,中间的参数用于防止中文导致的乱码
-
使用IDEA生成JavaDoc文档:tools-generate-JavaDoc,注意输入参数
-
-
标注的部分比较重要,从上到下分别是配置javadoc的范围,输出文件路径以及命令行参数
-
只有使用utf-8编码才能保证生成时可以正常处理中文字符
-
除此之外,还可以注解哪些需要生成,哪些权限类需要生成等等比较精细的控制
-
不要勾选"include text sources",会生成奇怪的错误
JAVA流程控制
用户交互Scanner
基础语法
Scanner s=new Scanner(System.in);
-
类似于c++里的cin,用于获取用户输入的数据
-
Scanner是一个工具类,next()与nextLine()方法获取输入的字符串,hasNext()与hasNextLine()判断是否还有输入的数据
-
输入指令是System.in,用一个流对象接收并存储,用if(hasNext())等判断是否有输入队列
-
next()以空白为结束符,nextLine()以回车为结束符
循环结构
-
100.for可以快速生成一个for循环,可以从0到99也可以从99到0
-
System.out.print()输出不会换行,但System.out.println()会输出完换行
-
便利数组的for循环
int[] nums={10,20,30,40};
for(int x:nums)
{
System.out.println(x);//x是数组每个元素的副本
} -
break:可以终止循环,而continue:终止此次循环,跳到下一次循环
-
java没有goto关键词,但是可以使用带标签的break和continue实现goto
方法
相当于c++的函数
-
方法包含于类与对象中 System.out.println()就分别是类-对象-方法
-
方法写法
public int add(int a,int b){}
命令行传参
-
了解即可的知识点
-
点击最下行的command打开控制台,也可以在当前目录下打开cmd,注意类所属的包的位置,在src目录下输入java com.kuang.method.Demo03从而运行这个类的main方法,但是如果这个方法有参数,可以在后面附带上参数
可变参数
public void text(int...i){
System.out.println(i[3]);
}
-
可以输入多个参数,相当于输入一个数组
-
有一定的限制:
-
一个方法中只能指定一个可变参数
-
这个可变参数必须是方法的最后一个参数,任何普通参数都必须在它之前声明
-
异常抛出
发生异常就会弹出异常,如ArrayIndexOutOfBoundsException:数组下标越界
public void readFile(String file) throws IOException{
}
数组
-
数组的声明与定义
//声明数组
int[] a; //首选,这是java风格
int a[]; //c/c++风格,这种类型java也是支持的
//数组的定义
int[] a=new int[10];
//也可以
int[] a={1,2,3,4,5}
//
int n=a.length();
堆和栈
-
创建一个数组时,在栈里创建它的引用,new出空间时,这片空间属于堆,栈里的数据记录了堆里所属空间的地址
-
数组的内容,无论是原始类型还是其他类型,都是保存在堆中的
数组的初始化
//静态初始化
int[] a={1,2,3,4,5}
//动态初始化,//只能挨个进行复制,每个空间的默认值为0
int a=new int[10];
ArrayIndexOutOfBoundsException:数组下标越界
数组的使用
-
对于for循环,可以使用增强型的for循环
-
int[] arrays={1,2,3,4,5};
for(int arr:arrays){} //arr是每个元素的副本
//数组作为方法的参数
public static void returnArray(int[] arrays){
return arrays;
}
//
-
Java面向对象编程
类方法调用
//静态与动态调用的差别是有没有static关键词
//静态调用,
public class Student{
public static void hasSay(){
System.out.println("学生说话了"); //用整个类调用,调用形式为Student.hasSay();
}
}
//动态调用
public class Student{
public void hasSay(){
System.out.println("学生说话了");
}
}
public class Demo{
public static void main(String[] args){
Stundet stu=new Student(); //创建一个对象需要这么写
stu.hasSay();
}
}
-
static方法是和类一起加载的,生成时期非常早,而非static方法是和对象一起加载的,只有当实例化时才会生成,于是static方法不能调用非static方法