JAVA基础语法
注释,标识符,关键字
注释:对代码的一个解释
分类:
-
单行注释 符号: // 注释 “//” 该符号后的字不会被执行
-
多行注释 符号:/ * 注释 * / "/ * “与”* * /"之间的不会被执行
-
文档注释 符号: /** */
标识符
标识符:Java所有的组成部分都需要名字,类名,变量名以及方法名都被称为标识符
关键字
标识符书写规则:
1. 所有的标识符都应该以字母(A--Z或者 a--z),美元符号($),下划线(_)开始
2. 首字符之后可以是字母(A--Z或者 a--z),美元符号($),下划线(_)或数字的组合
3. 不能使用关键字作为变量名或方法名
数据类型详解
数据类型
-
强类型语言: 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
优点:安全性提升,
缺点:速度慢
-
弱类型语言
-
JAVA数据类型分类:
-
-
基本类型:
-
数值类型:
-
整数类型:byte(2字节) short(4字节) int(6字节) long(8字节)(定义的数字后面加L)
-
浮点类型:float(4字节) double(8字节)
-
字符类型 char(char只能定义一个字符)
(String可以定义字符串,但不是数据类型,是类,)
-
-
boolean类型: true和false
-
引用类型:类(string),接口,数组
-
-
-
字节
- 位(bit):是计算机内部数据存储的最小单位
- 字节(byte):是计算机中的数据处理的基本单位,习惯上用大写B来表示
- 1B = 8bit
- 字符:是计算机中使用的字母,数字,字和符号
- 1024B = 1KB 1024KB = 1M 1024M = 1G
代码:
```java
package Base;
public class Demo02 {
public static void main(String[] args) {
//八大数据类型
//整数
int num1 = 10;
byte num2 = 12;
short num3 = 20;
long num4 = 100L; //Long类型要在数字后面加个L
//小数,浮点数
float num5 = 50.1F; //float后面加个F
double num6 = 3.1415926;
//字符类型
//字符
char name = 'A'; //(char只能定义一个字符)
//字符串,String不是关键字,是类
String name7 = "小王";
//布尔值
boolean flag = true;
boolean flag1 = false;
}
}
```
数据类型扩展以及面试题讲解
public class Demo03 {
public static void main(String[] args) {
//整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010; //八进制 0
int i3 = 0x10; //十六进制 0x 0~9 A~F
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("==========================================");
//浮点数拓展? 银行业务怎么表示?钱
//银行业务不能使用浮点数, 使用BigDecimal 数学工具类
//float 有限 离散 舍入误差 大约 接近但不等于
//double
//最好完全避免使用浮点数进行比较
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f == d);
System.out.println(f);
System.out.println(d);
float d1 = 123456789f;
float d2 = d1 + 1;
System.out.println(d1 == d2);
System.out.println("================================");
//字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1); //强制类型转换 将char类型转换成int类型
System.out.println(c2);
System.out.println((int)c2);
//所有的字符本身都是数字
//编码 Unicode(表有具体的对应编码)例如:(97 = a, 65 = A) 2字节 长度:0~65536
//U0000 UFFFF
char c3 = '\u0061'; //Unicode的书写: \u0061 = A
System.out.println(c3);
//转义字符
// \t 制表符 \n 换行 等等
System.out.println("Hello\tWorld");
//
System.out.println("====================================");
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb);
String sc = "hello world";
String sd = "hello world";
System.out.println(sc == sd);
//对象和内存分析
//布尔值扩展
boolean flag = true;
if(flag == true){} //if(flag == true){} = if(flag){}
//代码要简练
}
}
类型转换
-
由于JAVA是强类型语言,所以进行有些运算的时候,需要用到类型转换
低-------------------------------------------------->高
byte,short,char–> int -->long —>float —>double
-
运算中,不同类型的数据先转化为同一类型,然后进行运算
-
强制类型转换
-
自动类型转换
public class Demo05 {
public static void main(String[] args) {
//强制转换 (类型)变量名 高--->低
//自动转换 低---->高
int i = 128;
byte b = (byte)i; //内存溢出,
System.out.println(i);
System.out.println(b);
/*
注意点:
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 在把高容量转换到低容量的时候,强制转换
4. 转换的时候存在内存溢出,或者精度问题
*/
//精度问题
System.out.println("================================");
System.out.println((int)23.7);
System.out.println((int)-45.89f);
System.out.println("================================");
char c = 'a';
int d = c + 1;
System.out.println(d);
System.out.println((char)d);
}
}
public class Demo06 {
public static void main(String[] args) {
//操作比较大的数时候,注意溢出问题
//看数字不方便 数字之间可以用下划线分割
int money = 1000_000_000;
System.out.println(money);
int years = 20;
int total = money * years;
System.out.println(total);
long total2 = money * years; //默认是int,转换之前已经算完了,所以该做法无效
System.out.println(total2);
long total3 = money * (long)years;
System.out.println(total3);
}
}
变量
-
变量:就是可以变化的量
-
Java是一种强类型语言,每个变量都必须声明其类型
-
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{,varName[=value]}];
//数据类型 变量名 = 值; 可以使用逗号隔开来声明多个同类型变量。
public class Demo07 { public static void main(String[] args) { //int a = 1,b = 2, c = 3; 不建议这样写,程序可读性差 String name = "xiaowang"; char x = 'X'; double pi = 3.14; } }
变量作用域:
-
类变量
-
实例变量
-
局部变量
public class Demo08 { //类变量 static static double salary = 2500; /*实例变量:从属于对象; 如果变量不自行初始化,变量就是这个类型的默认值 默认值: 数值类型: 0 0.0 布尔值:默认false 除了基本类型其余为 null */ String name; int age; //main方法 public static void main(String[] args) { //局部变量;必须声明和初始化值 int i = 10; System.out.println(i); //变量类型 变量名字 = new Demo08(); Demo08 demo08 = new Demo08(); System.out.println(demo08.age); System.out.println(demo08.name); //类变量 static System.out.println(salary); } //其他方法 public void add(){} }
-
注意事项:
-
每个变量都有类型,类型可以是基本类型,也可以是引用类型
-
变量名必须是合法的标识符
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
-
-
-
常量
-
常量:初始化后不能再改变值!不会变动的值
-
所谓的常量是一种特殊的变量,它的值设定后,在程序运行过程中不允许被改变
-
final 常量名 = 值;
final double PI = 3.14;
-
常量名一般使用大写字符
变量的命名规范
-
类成员变量: 首字母小写和驼峰原则:monthSalary,除第一个单词以外,后面的单词首字母大写 lastName
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则:Man, GoodMan 所以的单词首字母都要大写
-
方法名:首字母小写和驼峰原则:run(), runRun() 除第一个单词外,后面的单词首字母大写
public class Demo09 { //static(静态的)是修饰符,不存在先后顺序 static final double PI = 3.14; public static void main(String[] args) { System.out.println( PI); } }
运算符
Java语言支持如下运算符
-
算术运算符:+, -, *, /, %, ++, –
package operator; public class Demo04 { public static void main(String[] args) { //++ —— 自增,自减 一元运算符 int a = 3; int b = a++; // a++ 先给b赋值(b = a = 3),在给a自增(a = a + 1 = 4), int c = ++a; //++a 先给a自增(a = a + 1),在给b赋值(b = a + 1 = 5) //自增和自减等价 System.out.println(a); System.out.println(b); System.out.println(c); //幂运算 2 ^ 3 2 ^ 2 ^ 2 = 8 很多运算使用工具类操作 double pow = Math.pow(3,2); //Math函数 System.out.println(pow); } }
-
赋值运算符: =
```java
package operator;
public class Demo01 {
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); }
}
``` -
关系运算符: >, <, >=, <=, ==, != instanceof(指出对象是否是特定类)
```java
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果 正确,错误 布尔值int a = 10; int b = 20; int c = 21; //取余,又叫模运算 System.out.println(c % a);//c / a 21 / 10 = 2 ... 1 System.out.println(a > b); System.out.println(a < b); System.out.println(a == b); System.out.println(a != b); }
}
``` -
逻辑运算符: &&(与) , ||(或) , !(非)
```java
package operator;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
// 与(and) 或(or) 非(取反)boolean a = false; boolean b = true; System.out.println("a && b: " + (a && b) ); //逻辑与运算 System.out.println("a || b:" + (a || b)); //逻辑或运算 System.out.println("! (a && b): " + (! (a && b))); //逻辑非运算 //短路运算(如果能直接判断,就不会执行后面的) int c = 5; boolean d = (c < 4) && (c++ < 4); //如果执行后面的,则c变为6 System.out.println(d); System.out.println(c); }
}
```
-
位运算符: &, |, ^, ~, >>(右移), <<(左移), >>> (仅仅作为了解)
好处: 效率贼高
package operator; public class Demo06 { public static void main(String[] args) { /* A = 0011 1100 B = 0000 1101 A & B (一位一位计算)(只有1 1 得 1 , 其余都为0 )(结果: 0011 1100) A | B (只要存在1,就为1)(0011 1101) A ^ B (异或)(相同为0,不同为1)(0011 0001) -B (取相反的)(1111 0010) 面试题: 2 * 8 = 16怎样计算最快? 可以拆分为 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 */ System.out.println(2 << 3); } }
-
条件运算符 ? : //必须掌握
package operator; //三元运算符 public class Demo08 { public static void main(String[] args) { // x ? y : z //如果 x == true,则结果为y,否则结果为z int score = 80; String type = score < 60 ?"不及格":"及格"; System.out.println(type); } }
-
扩展赋值运算符: +=, -=, *=, /=
package operator; public class Demo07 { public static void main(String[] args) { int a = 10; int b = 20; a+=b; //a = a + b; System.out.println(a); a-=b; //a = a - b; System.out.println(a); //字符串连接符 + , + 号两侧只要出现字符串类型(例:""), System.out.println(a + b); System.out.println("" + a + b); //结果: 1020 System.out.println(a + b + ""); //结果: 30 } }
优先级
(图片来源于360百科)
包机制
-
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
-
包语句的语法格式:
package pkg1[. pkg2[. pkg3…]];
3. 一般利用公司域名倒置作为包名; com.xiaowang.www 4. 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用“import”语句可以完成此功能 import package1[.package2...].(classname|*); (例子:import java.util.Date;) import com.xiaowang.base.* (* 表示通配,即这个包里的所有的类)
JavaDoc生成文档
-
javadoc命令是用来生成自己API文档的
-
参数信息
-
@author 作者名
-
@version 版本号
-
@since 指明需要最早使用的jdk版本
-
@param 参数名
-
@return 返回值情况
-
@throws 异常抛出情况
package Base; /** * @author xiaowang * @version 1.0 * @since 1.8 */ public class Doc { String name; //定义属性 //定义方法 /** * * @author xiaowang * @param name * @return * @throws Exception //(自动提示抛出异常) */ public String test(String name) throws Exception{ return name; } }
-