Java基础语法
注释、标识符、关键字
注释
- 书写注释是一个非常好的习惯
- 平时代码要注意规范
Java的注释分为三种:
-
单行注释: //注释
-
多行注释: /*注释*/
-
文档注释: JavaDoc: /** */
/**
*@Description
*/
标识符
- Java所有组成部分都需要名字。类名,变量名以及方法名统称为标识符。如:public,static, class
- 所有标识符都应该以字母(A-Z或者a-z),美元符,下划线开始
- 不能使用关键字作为变量名或者方法名
- 标识符是大小写敏感的
- 不建议使用中文以及拼音命名
数据类型
-
Java是一种强类型语言,要求变量使用严格符合规定,所有变量必须先定义才能使用,所以安全性高,与python不同
-
Java的数据类型分为两大类:
-
基本类型:int 4个字节,short2个字节,long8个字节,byte 1个字节; float4个字节,double8个字节,char2个字节;boolean 占一位
-
引用类型:类,接口,数组
float num = 10.1F; //float类型要在数字后面加个F long num1 = 30L; //Long类型要在数字后面加个L //字符 char name0 = "国家"; String name = "love"; //String不是关键字,是一个类 //布尔值 boolean a = true;
-
-
拓展
public class demo03 { public static void main(String[] args) { //整数拓展,进制,十进制,八进制,十六进制 int i = 10; int i2 = 010; //八进制0 int i3 = 0x10; //十六进制0x ///================================================ //浮点数拓展? 银行业务怎么表示? //用BigDecimal 数学工具类 //================================================ //float 有限的,是离散的,有舍入误差,接近但是不等于 //double //最好完全避免用浮点数进行比较 //最好完全避免用浮点数进行比较 //最好完全避免用浮点数进行比较 float f =0.1f; //0.1 double d = 1.0/10; //0.1 System.out.println(f==d); //会输出false System.out.println(f); System.out.println(d); float d1 = 231313131313131313f; float d2 = d1 + 1; System.out.println(d1==d2); //会输出true //============================================== //字符拓展 //============================================== char c1 ='a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1); //强制类型转换 输出97 System.out.println(c2); System.out.println((int)c2); //强制类型转换 输出20013 //所有字符本质还是数字 //编码 Unicode表 2个字节 0-65536 //U000 UFFF char c3 = '\u0061'; System.out.println(c3); //a //转义字符 // \t 制表符 // \n 换行 //... System.out.println("Hello\nWorld!"); System.out.println("================================================"); String sa = new String("Hello World"); String sb = new String("Hello World"); System.out.println(sa==sb); //false String sc = "Hello World"; String sd = "Hello World"; System.out.println(sc==sd); //true //布尔值拓展 boolean flag = true; if (flag){ } //老手 if (flag==true){ } //新手 //less is more 代码要精简易读 } }
类型转换
- 表示数的范围从低到高:byte short int long float double
- 运算中不同类型的数据类型化为同一类型进行运算
public class Demo4 {
public static void main(String[] args) {
int i =128;
byte b = (byte)i; //内存溢出,byte类型最大为127
//强制类型转换 (类型)变量名
double c = i; //自动转换,低到高
byte h = 3; //3是int型,在这里做了一次强转
h=h+4;
//4是整数,默认是int型,这样会抛弃int前3个字节,会报错,所以由高到低要强制类型转换
//注意float和int虽然都是4个字节,但是float中有表示小数部分的,所以两者相加得float
System.out.println(b);
//面试题:
byte h1 =4 ;
byte h2 = 7;
//h = 3+ 7;//3和7是常量,就可以判断出来不会超出范围丢失精度
h=h1+h2; //h1,h2是变量,如果h2是127,就有可能超出范围,就会丢失精度
System.out.println(h); //编译不通过,输出可能损失精度
int x;
int x1=10;
int x2=98;
x=x1+x2
System.out.println(x); //编译通过,整数运行后相加还是整数,如果超出32位自动保留原有32位变成负数了,这是底层的逻辑规定了
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换成为不相干的类型
3.由高到低,强制转换,可能存在内存溢出或者精度问题
4.
*/
System.out.println((int)23.7); //输出23
System.out.println((int)-45.89f); //输出-45
char e = 'a';
int d = e+1;
System.out.println('a'+1);//因为a对应01100001=97,所以输出是int型占据4个字节=98
System.out.println(d);
System.out.println((char)d); //输出b
System.out.println('你'+0);//中文用两个字节存储,unicode标准编码表
System.out.println("3"+2);//任何数据类型和字符串相加就是字符串的拼接;
int a =4;int b=5;
System.out.println(a+","+b);//这就可以利用这个特性完成一句话同时输出a和b了
}
}
public class Demo5 {
public static void main(String[] args) {
//操作比较大的数的时候注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
System.out.println(money);
int year = 20;
int total = money*year; //计算的时候溢出了
System.out.println(total); //输出-1474836480
long total2 = money*year; //默认int,做完乘法后才转成long的
System.out.println(total2); //输出-1474836480
long total3 = money*((long)year);
System.out.println(total3); //输出20000000000
//L l 大写的L和l的问题,小写的l写在数字后表示long类型时容易被误认为是1,所以都用大写的L
}
}
变量、常量
-
Java是一种强类型语言,每个变量必须声明其类型
-
Java变量是程序中最基本的存储单元,其要素包含变量名,变量类型以及作用域
-
type varName [=value] [{,varName[=value]}]
int a =1, b=3,c=3;
这种最好分三行写,提升程序的可读性
-
每个变量都有类型,可以是基本类型,也可以是引用类型;
-
变量名必须是合法的标识符
-
变量的作用域
public class Demo08 { //属性:变量 static double salary = 2500; //实例变量:从属于对象,如果没有进行初始化,默认等于零 0 0.0 //布尔值默认为false //除了基本类型,其余都是NULL int age; //常量 static final double PI =3.14; //static和final这样的修饰符不存在先后顺序,常量尽量大写 final static double pi=3.14; //main方法 public static void main(String[] args) { //局部变量:必须声明和初始化值 Demo08 demo08 = new Demo08(); System.out.println(demo08.age); System.out.println(salary); } //其他方法 }
- 变量名的命名规范
- 所有变量方法以及类名:见名知意
- 类变量成员:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则 GoodMan
- 方法名:首字母小写和驼峰原则: run();runRun();
- 变量名的命名规范
运算符
public class Demo01 {
//ctrl+D 复制当前行到下一行
public static void main(String[] args) {
int a =10;
int b =20;
int c =25;
int d =25;
//二元运算符
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b); //除法会有小数的时候一定要注意类型转换
int x = 6370;
x = x/1000*1000;
System.out.println(x); //输出不是6370,因为java是强类型语言,6370/1000的时候会得到一个整数,这里有舍弃
//一元运算符
//++ —- 自增 自减
int a1 =3;
int b2 = a1++; //先把a1赋值给b2,再自增
int i = 3;
i =i++;
System.out.println(i);//输出的是3而不是4,这里与内层运行逻辑有关系,i++会先用一个temp记录i;i再自增,自增后右边的自增运算才做完,然后才往左边赋值,用的是temp赋值
//幂运算 很多运算使用工具类来操作
double e = Math,pow(2,3);
//问:2的8次方怎么运算最快
/*
效率高
左移运算<< *2
右移运算>> /2
*/
//字符串连接 + ,只要不是在末尾有一方出现String类型的就会把另一方也转成String类型
System.out.println(""+a+b); //输出1020
System.out.println(a+b+""); //输出30
//x?y:z
//如果x为true则为y,否则为z
}
}
public class Demo02 {
public static void main(String[] args) {
long a = 12312312313213L;
int b = 123;
short c =10;
byte d = 8;
System.out.println(a+b+c+d); //Long 自动升型
System.out.println(b+c+d); //Int
System.out.println(c+d); //Int
}
}
包机制
- 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
- 包语句的语法格式为:
package pkg1[.pkg2[.pkB3.-J]; (包的本质就是文件夹)(这句话必须放在程序的最上面) - 一般利用公司域名倒置作为包名;www.baidu.com com.baidu.www
- 为了能够使用某一个包的成员,我们需要在Java 程序中明确导入该包,使用“import”语句可完成此功能
import packagel[.packagez…].(classnamel*);(*表示导入包底下所有的类)
JavaDoc
- javadoc命令是用来生成自己API文档的
- 参数信息
@author 作吉名
@version版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况