Java基础
注释、标识符、关键字
注释
书写注释是一个非常好的习惯,注意规范!
-
单行注释 //
-
多行注释/* */
-
文档注释/** */可加参数
关键字
abstract | assert | boolean | break | byte |
---|---|---|---|---|
摘要 | 明确肯定 | 布尔值 | 打破(跳出循环) | 字节 |
case | catch | char | class | const |
案例 | 捕获多种数据类型的异常对象 | 只可容纳单个字符的一种基本数据类型 | 类 | 常类型(定义的变量或对象的值不可改变) |
continue | default | do | double | else |
结束循环 | 默认运算符或文本生成类型的默认值 | 一起用于创建do-while循环 | 数据类型 | 判断语句 |
enum | extends | final | finally | float |
枚举类型 | 继承 | 可以用来修饰类、方法和变量(包括成员变量和局部变量) | 一定会被执行 | 数据类型 |
for | goto | if | implements | import |
循环 | 无条件转移语句 | 判断语句 | 对接口的实现 | 导入 |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
注意:
-
所有的标识符都应该以字母(A-Z或者a-z)、美元符($)、或者下划线(_)开始
-
首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线()或数字的任何字符组合
-
不能使用关键字作为变量名或方法名。
-
标识符是大小写敏感的
-
合法标识符举例: age、$salary、value、_1_value
-
非法标识符举例:123abc、-salary、#abc
-
可以但不建议中文或拼音命名 Low
数据类型
强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
八大基本类型:
-
byte
-
short
-
int
-
long
-
float
-
double
-
char
-
boolean
public class Hello { public static void main(String[] args) { //八大基本类型 //整数 byte num1 = 127; //(-128~128之间,超出报错) short num2 = 32767; //(-32768~32768之间,超出报错) int num3 = 10; //(正负二十一亿,超出报错) long num4 = 10L; //(Long类型要在数字后面加个L) //小数:浮点数 float num5 = 50.1F; //(float类型要在数字后面加个F) double num6 = 3.141592653589793238462643; //字符 char name = 'A'; //(只能一个字符) //字符串 //String name1 = "我爱你中国"; //(String是类,不是关键字) //布尔值 boolean flag = true; boolean flag1 = false; } }
什么是字节:
-
位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
-
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示,
-
1B (byte,字节)= 8bit(位)
-
字符:是指计算机中使用的字母、数字、字和符号
-
1bit表示1位,
-
1Byte表示一个字节1B=8b
-
1024B=1KB
-
1024KB=1M
-
1024M=1G.
拓展
-
整数拓展
public class Hello { public static void main(String[] args) { //进制 二进制0b开头 八进制0开头 十进制 十六进制0x开头 int i = 10; //十进制 int i2 = 0b10; //二进制 int i3 = 010; //八进制0 int i4 = 0x10; //十六进制 System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println(i4); } }
2.浮点数拓展
public class Hello { public static void main(String[] args) { //真题:银行业务怎么表示?钱 //BigDecimal 数学工具类 //float 有限的 离散的 会舍入误差 大约值 接近但不等于 //所以最好完全避免使用浮点数进行比较 // //double float f = 0.1f; //等于0.1 double d = 1.0/10; //等于0.1 System.out.println(f==d); //false ==号表示是否相等 float d1 = 3165431246312f; float d2 = d1 + 1; System.out.println(d1==d2);//true } }
3.字符拓展
public class Hello { public static void main(String[] args) { char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1);//强制转换 System.out.println(c2); System.out.println((int)c2);//强制转换 //所有的字符本质还是数字 //编码 Unicode表 (97=a 65=A) 占2字节 最多表示65536个字节 } }
Unicode表(部分)
public class Hello { public static void main(String[] args) { char c1 = '\u0061'; System.out.println(c1); //a char c2 = '\u005A'; System.out.println(c2); //Z } }
4.转义字符拓展
public class Hello { public static void main(String[] args) { // \t 制表符(水平跳到下一个TAB位置) System.out.println("Hello\tWorld"); // \n 换行 System.out.println("Hello\nWorld"); // \r 回车(当前位置移到下一行开头) System.out.println("Hello\rWorld"); // \" 代表一个双引号字符 System.out.println("Hello\"World"); } }
5.布尔值拓展
public class Hello { public static void main(String[] args) { boolean flag = true; if (flag==true){ //新手写法 System.out.println("成功"); } if (flag){ //老手写法 默认true System.out.println("正确"); } } } //Less is More! 代码要精简易读
类型转换
由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。
小数优先级大于整数
强制类型转换
格式:(类型)变量名 高-->低
public class Hello { public static void main(String[] args) { char c = 'a'; int d = c+1; System.out.println(d); System.out.println((char)d); } }
自动类型转换
低-->高
注意点: 1.不能对布尔值进行转换 2.不能把对象类型转换为不相干的类型 3.在把高容量转换低容量时,强制转换 4.转换的时候可能存在内存溢出,或者精度问题
内存溢出了
精度问题
public class Hello { public static void main(String[] args) { //操作比较大的数的时候,注意溢出问题 //JDK7新特性,数字之间可以用下划线分割,不会被输出 int money = 1_000_000_000; int years = 20; int total = money*years; //结果:-1474836480,计算的时候溢出了 long total2 = money*years;//结果:-1474836480,默认是int,转换前已经存在问题了 long total3 = money*((long)years);//结果正确,先把一个数转换为Long System.out.println(total3); } }
变量、常量
-
Java是一种强类型语言,每个变量都必须声明其类型。
-
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
-
数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型变量。
注意事项:
-
每个变量都有类型,类型可以是基本类型(八大基本类型),也可以是引用类型(String……)。
public class Hello { public static void main(String[] args) { int a=1,b=2,c=3; //不提倡 保证程序可读性顺畅 int d=4; int e=5; String name = "HGP"; char x = 'X'; double dou = 3.1415; } }
-
变量名必须是合法的标识符。
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
变量作用域
public class Hello { //属性:变量 //实例变量:从属于对象;如果不自行初始化,这个类型的默认值 //数字类型:默认0 0.0 布尔值:false 除了基本类型其余都是null; String name; int age; //类变量 static static double salary = 2500; //main方法 public static void main(String[] args) { //局部变量:必须声明荷初始化值,写在方法里 int i = 10; //只在这个方法得括号里有用 System.out.println(i); //实例变量:变量类型 变量名字 = new Hello(); Hello hello = new Hello(); System.out.println(hello.age); System.out.println(hello.name); //类变量 :static System.out.println(salary); } //其他方法 public void add() { } }
常量
-
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
-
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
final 常量名=值; final double PI=3.14;
-
常量名一般使用大写字符。
public class Hello { //修饰符,不存在先后顺序 static final 可换位置 static final double PI = 3.14; public static void main(String[] args) { System.out.println(PI); } }
命名规范
-
所有变量、方法、类名:见名知意
-
类成员变量:首字母小写和驼峰原则: monthSalary(月工资)除了第一个单词以外,后面的单词首字母大写lastName(姓氏)
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则: Demo01 Demo02
-
方法名:首字母小写和驼峰原则: run(), runRun()
运算符
-
算术运算符:+,-,*,/,%(取余,模运算),++,--
public class Hello { public static void main(String[] args) { //二元运算符 int a = 10; int b = 20; System.out.println(a+b);//30 System.out.println(a-b);//-10 System.out.println(a*b);//200 System.out.println(a/b);//0 错的 四舍五入取的0 应该转为小数 System.out.println(a/(double)b);//0.5 一定注意作用范围 //如果有long型 结果就为long,没有long,都为int long a = 21315645321L; int b = 123; short c = 10; byte d = 8; System.out.println(a+b+c+d);//21315645462 System.out.println(b+c+d);//141 Int System.out.println(c+d);// 18 Int //取余 模运算 int a = 10; int b = 21; System.out.println(b%a);//1 c/a 21/10=2...1 //++ 自增 --自减 一元运算符 int a = 3; int b = a++; //a++ a=a+1 执行完这行代码后,先给b赋值,再自增 System.out.println(a); System.out.println(b); int c = ++a; //a++ a=a+1 执行完这行代码前,先自增,再给b赋值 System.out.println(a); System.out.println(c); //幂运算 2^3=8 很多运算,会使用一些工具类来操作 double pow = Math.pow(2,3); System.out.println(pow); } }
-
赋值运算符:= (a=10,把10赋值给a)
-
关系运算符:>,<,>=,<=,==(等于),!= (不等于)instanceof
public class Hello { public static void main(String[] args) { //关系运算符返回的结果:正确 错误 布尔类型 int a = 21; int b = 123; System.out.println(a>b);//false System.out.println(a<b);//true System.out.println(a==b);//false System.out.println(a!=b);//true } }
-
逻辑运算符: &&,||,! 与或非
public class Hello { public static void main(String[] args) { //与(and) 或(or) 非(取反) boolean a = true; boolean b = false; System.out.println("a && b:"+(b&&a));//两个都为真,才true,第一个假,第二个不执行 System.out.println("a || b:"+(a||b));//两个变量有一个真,结果true System.out.println("!(a && b):"+!(b&&a));//如果真,则变为假,如果假变为真 //短路运算 int c = 5; boolean d = (c<4)&&(c++<4); System.out.println(d);//第一个假 System.out.println(c);//第二个不执行 } }
-
位运算符:&,|,^,~,>>,<<,>>>(了解!! ! )
/* A = 0011 1100 B = 0000 1101 ------------- A&B = 0000 1100 如果两个都是1才输出1 A|B = 0011 1101 如果对应位都是0,才是0,有一个1就1 A^B = 0011 0001 相同为0 否则是1 ~B = 1111 0010 完全相反 */ System.out.println(2<<3);//16 2*8 = 16 << *2 >> /2
-
条件运算符 ?∶
public class Hello { public static void main(String[] args) { //x ? y : z //如果x=true,则结果为y,否则结果为z int score=80; String type = score<60?"不及格":"及格"; System.out.println(type);//及格 } }
-
扩展赋值运算符:+=,-=,*=,/=
public class Hello { public static void main(String[] args) { int a = 10; int b = 20; a+=b; //a=a+b System.out.println(a);//30 a-=b; //a=a-b System.out.println(a);//-10 } }
8.字符串连接符 :+
public class Hello { public static void main(String[] args) { int a = 10; int b = 20; //字符串加在前面,做连接符 System.out.println(""+a+b);//1020 //字符串加在后面,前面正常运算 System.out.println(a+b+"");//30 } }
怎么在控制台输出二进制
int c = 9; //0000 1001 for (int i = 31; i>=0 ; i--) { System.out.print((c & (1<<i)) ==0?"0":"1"); }
包机制
package 就是文件夹,必须放在最上面。
-
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
-
包语句的语法格式为: package pkg1[. pkg2[. pkg3...]];
-
一般利用公司域名倒置作为包名;com.systop
-
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用"import”语句可完成此功能 import package1[ .package2....].(classname|*);
JavaDoc
javadoc命令是用来生成自己API文档的
参数信息
-
@author作者名
-
@version版本号
-
@since指明需要最早使用的jdk版本
-
@param参数名
-
@return返回值情况
-
@throws异常抛出情况