Java基础
注释
-
单行注释 //我是单行注释
-
多行注释 /* 我是多行注释 */
-
文档注释 /** *@author *@Description */
标识符
类名、变量名以及方法名都被称为标识符
- 所有标识符应该以字母、$或_开始,首字母之后就可以是字母、$、下划线和数字的任意组合
- 标识符是大小写敏感
数据类型
- Java是强类型语言,要求变量的使用严格符合规定,变量必须先定义后使用
- Java数据类型分为两大类,基本类型和引用类型
- 1字节(byte)等于8位(bit)二进制,1个字节可以储存1个英文字母或者半个汉字或一个数字
- 字符是指计算机中使用的字母、数字、字和符号
- long类型数字后面加个L,float类型数字后加个F
- char name=‘陈’;
- 数字默认值是0/0.0;char默认值是u0000;boolean默认值是false;引用类型都是null
数据类型拓展
-
二进制0b开头,例如int i=0b100;100代表二进制数字,转换为十进制是4
-
八进制0开头,例如int i=010;10代表八进制数字,转换为十进制是8
-
十六进制0x开头,例如int i=0x10;10代表十六进制数字,转换为十进制是16
-
最好完全避免使用浮点数(float、double)比较
-
银行业务不用浮点数比较,使用BigDecimal类
-
所有的字符本质还是数字
-
转义字符 \t 制表符 \n换行
类型转换
- 低---->高,byte,short,char->int->long->float->double
- 强制类型转换 (类型)变量名 高到低
- 自动转换 低到高,直接使用就行
- 不能对布尔值进行转换
- 转换时可能存在内存溢出或者精度问题
- 两个int型数字做除法,可能产生小数,需要将其中一个数字转为double,即使是低类型到高类型也可以使用强转的形式
- 如果有long类型数字,操作之后就是long类型,double同理。如果是short、byte和int类型操作,默认是int
变量及作用域
局部变量:在方法中声明,必须进行初始化,作用域仅限于这个方法
实例变量:在类中方法外定义,从属于对象,如果不进行初始化,输出此类型默认值,int类型默认值是0,String类型默认值是null,布尔值默认是false,除了基本类型,默认值都是null。实例变量不能在此类中的方法直接使用,必须定义一个自身的对象,通过对象在方法中被调用。
类变量:相比实例变量,加static关键字。类中方法外使用static定义变量,方法内可直接使用。final和static都是修饰符,顺序无所谓。
常量:加final关键字定义 。
运算符
-
int a=3;
int b=a++; //执行完这行代码后,先赋值,再自增
int c=++a; //执行完这行代码前,先自增,再赋值
输出a,b,c分别是5,3,5
-
A^B,异或运算,转换为二进制运算,同0异1
-
左移<< 右移>> 例如2<<3=16(左移乘2,右移除2);
int a=10,b=20; //字符串连接符 + String
System.out.println(""+a+b);//1020,如果字符串在前面,后面的自动转换为字符串拼接
System.out.println(a+b+"");//30,如果字符串在后面,前面的依然运算
//把a+b打上括号,结果都是30
包
包的本质就是文件夹
《阿里巴巴Java开发手册》
JavaDoc
-
JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API。
-
javadoc命令是用来生成自己API文档的 cmd->javadoc -encoding UTF-8 -charset UTF-8 Hello.java
-
打开.java所在文件夹,打开cmd,键入javac Hello.java,生成相应的.class文件,随后键入java Hello,显示输出结果
Scanner对象
-
Scanner类用于获取用户的输入
-
Scanner sc=new Scanner(System.in); //创建一个扫描器对象,用于接收键盘数据
-
通过Scanner类的next()和nextLine()方法获得输入的字符串(不管是字母、数字、特殊符号还是汉字,一律都接收为字符串),在读取前我们一般需要使用hasNext()和hasNextLine()判断是否还有输入的 数据
-
next():不能得到带有空格的字符串,空格开头自动忽略,空格在有效字符之后,以空格为结束。
-
nextLine():以Enter为结束符,在此之前的所有字符包括空格都能获取。
-
一次next()代表接受1次
-
.class(字节码文件)
循环
-
for( ; ; ){ } // 死循环
-
表达式for(表达式1;;表达式3)可理解为for(表达式1;1;表达式3)
方法
- Java都是值传递
- 引用传递:对象,本质还是值传递
- 静态方法加了static;反之没有;
- 静态方法/属性可以通过 类名.方法名直接调用,反之要将类实例化为对象(new);
- 同为一个类的静态方法和非静态方法(main方法是静态的),静态方法可以调用静态方法,但无法调用非静态方法,可以理解为静态方法是和类一起加载而存在的,而非静态方法要在类实例化(就是new 为对象)之后才存在;非静态方法可以调用静态方法;非静态方法可以直接调用同类的非静态方法,其它类的非静态方法只能通过对象调用;
- 方法重载就是在一个类中,有相同的函数名称,但形参不同的函数
- 方法重载规则:方法名称必须相同;参数列表必须不同(个数、类型或者排列顺序)
- 返回类型可以相同也可以不同
- 仅仅返回类型不同不能作为方法重载
- 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配
- return:结束方法,返回一个结果;break:跳出switch;结束整个循环;continue:结束一次循环
可变参数
一个方法中只能设定一个为可变参数,而且必须是形参的最后一个:int... numbers//本质是数组,类似numbers[]
数组
数组定义:int[] array;int array[];
创建数组:int[] array=new int[9];int类型默认是0;除了八大基本类型都是引用类型,数组是引用类型,数组本身也是对象,它的元素相当于类的实例变量,也相当于对象的成员变量。Java对象在堆中
静态初始化:int[] a={1,2,3};Man[] mans={new Man(),new Man()};
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组