Java基础语法
注释
-
注释并不会被执行,是给我们写代码的人看的
-
书写注释是一个非常号的习惯
-
注释的分类
-
单行注释 // 注释
-
多行注释 /* 注释 */
-
文档注释
/** * */
-
-
平时写代码一定要注意规范。
标识符
- 关键字
- Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
- 标识符的规范
- 标识符由字母(A-Z或者a-z),美元符($)、数字或者下划线(_)组成
- 不能以数字开头
- 不能使用关键字命名标识符
- 标识符大小写敏感
- 可以使用中文名,但是不建议这样去使用,也不建议使用拼音。
- 狂神原文标识符注意点
- 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母、美元符、下划线或者数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符是大小写敏感的
- 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音。
数据类型
- 强类型语言
- 要求变量的使用严格符合规定,所有变量都必须先定义后才能使用
- 弱类型语言
- VB
- JS
- Java的数据类型分为两大类:基本类型和引用类型
- 基本数据类型
- 数值类型
- 整数类型
- byte占1个字节范围:-128~127
- short占2个字节范围:-32768~32767
- int占4个字节范围:-2147483648~2147483647
- long占8个字节范围:-923372036854775808~923372036854775807
- 浮点类型
- float占4个字节
- double占8个字节
- 字符类型char占2个字节
- 整数类型
- boolean类型:占1位其值只有true(正确)和false(错误)两个
- 数值类型
public class lesson1{
public static void main(String[] args) {
//八大基本数据类型
int num1=10; //最常用
byte num2=1;
short num3=30;
long num4=50L; //Long类型要在数字后面加L
//小数:浮点数
float num5=50.1F; //float类型要在数字后面加个F
double num6=3.1415926;
//字符
char name='A';
//字符串String不是关键字,是类
String name1="小雷熊";
//布尔值
boolean flag1 = true;
boolean flag2 = false;
}
}
-
引用数据类型
-
类
-
接口
-
数组
-
-
扩展
import java.sql.SQLOutput;
public class Lesson2 {
public static void main(String[] args) {
//整数拓展: 进制 二进制 十进制 八进制 十六进制
/*
二进制 0b开头
八进制 0开头
十进制
十六进制 0x开头
*/
int i = 10;
int i2 = 010;//八进制
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;
double d = 1.0 / 10;
System.out.println(f == d); //返回了false
System.out.println(f);
System.out.println(d);
float d1 = 213156116f;
float d2 = d1 + 1;
System.out.println(d1 == d2); //返回了ture
//==============================================================
/*
*字符拓展
*
* */
//==============================================================
System.out.println("========================================");
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1); // 强制类型转换
System.out.println(c2);
System.out.println((int)c2); // 强制类型转换
// 所有的字符本质还是数字
// 编码 Unicode表 2字节 65536 最早的Excle 最多有2的十六次方=65536
// U0000 UFFFF
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
System.out.println("======我是分割线=====");
String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);//ture
//对象 从内存分析
//布尔值扩展
boolean flag = true;
if (flag==true){} //这两行 新手程序员
if (flag){} //是一样的 老手程序员
// less is More!代码要精简易读
}
}
类型转换
低------------------------------------------------------------->高
byte,short,char->int->long->float->double
- 运算中,不同类型的数据先转换为同一类型,然后进行运算。
- 强制类型转换
格式:(类型)变量名
作用:将高数据类型转换为低数据类型
注意:使用强制类型转换时会造成精度的损失
public class Lesson3 {
public static void main(String[] args) {
int i=128;
byte b=(byte)i;//内存溢出 采用了强制类型转换
int j=128;
double d=i;
// 强制类型转换 (类型)变量名 高-->低
// 自动类型转换 低-->高
System.out.println(i);
System.out.println(b);
System.out.println(j);
System.out.println(d);
/*
* 注意点
* 1.不能对布尔值进行转换
* 2.不能把对象类型转换为不相干的类型
* 3.在把高容量转换到低容量的时候,强制转换
* 4.转换的时候可能存在内存溢出,或者精度问题!
* */
System.out.println("================================");
System.out.println((int)23.7); //23
System.out.println((int)-45.89f); //-45
System.out.println("================================");
char c='a';
int int_d = c+1;
System.out.println(int_d);
System.out.println((char)int_d);
}
}
- 自动类型转换
常见问题
public class Lesson4 {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
// JDK7新特性,数字之间可以用下划线分割
int money = 1000000000;
int money_n = 10_0000_0000;
int years = 20;
int total =money*years;
long total2=money*years;
System.out.println(money);
System.out.println(money_n);
System.out.println(total);//-1474836480 计算的时候溢出了
System.out.println(total2);//-1474836480 默认是int,转换之前已经存在问题了
long total3 = money*((long)years); //先把一个数转换为long,此时结果的类型为long类型而不是int类型了
System.out.println(total3);//20000000000
//L l 尽量采用大写的L
//避免产生歧义
}
}
变量
-
变量是可以改变的量
-
Java是一种强类型语言,每个变量都必须声明其类型。
-
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。 //不建议在同一行定义多个变量值这样看起来很麻烦。
注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符。
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
变量作用域
- 类变量
- 需要加关键字static
- 写在类里面的
- 实例变量
- 写在类中间的
- 没有static关键字
- 局部变量
- 写在方法里面的
public class Variable{
static int allClicks=0; //类变量
String str="Hello World"; //实例变量
public void method(){
int i=0; //局部变量
}
}
public class Lesson6 {
//属性:变量
//实例变量:从属于对象;如果不自行初始化,这个类型的默认值 0 0.0 u0000
//布尔值:默认是false
//除了基本类型,其余的默认值都是null;
//null为空
//类变量static
static double salary=2500;
String name;
int age;
//main方法 主程序方法
static {
}
public static void main(String[] args) {
//局部变量:必须声明和初始化值
//在方法中定义的变量
int i=10;
System.out.println(i);
// 变量类型 变量名 =new Lesson6();
Lesson6 lesson6=new Lesson6();
System.out.println(lesson6.age);
System.out.println(lesson6.name);
//类变量 static关键字
System.out.println(salary);
}
//其他方法
public void add(){
}
}
常量
- 初始化候不能再改变值!不会变动的值。
- 所谓常量可以理解成一种特殊的变量,他的值被设定候,再程序运行过程中不允许被改变。
- 关键字final
- 常量名一般使用大写字符。
//final 常量名=值;
final double PI=3.14;
public class Lesson7 {
// 修饰符,不存在先后顺序
static final double PI=3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
变量命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:第一个单词首字母小写和驼峰原则(单词首字母大写):monthSalary 除了第一个单词以外,后面的单词首字母大写
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
运算符
Java语言支持如下运算符:
- 算数运算符:+,-,*,/,%,++,–
- 赋值运算符=
- 关系运算符:>,<,>=,<=,==,!= instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>
- 条件运算符 ? :
- 扩展赋值运算符:+=,-=,*=,/=
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl+D:复制当前行到下一行;
int a=10;
int b=20;
int c=30;
int d=35;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
}
}
自增,自减运算符
- 自增运算符:++
- 自减运算符:–
自增自减运算符的规则
// ++ -- 自增,自减 一元运算符
int a;
int b;
a=1;
a++; //等价于a=a+1;
++a; //等价于a=a+1;
//虽然a++和++a本质上都是让a的值自增1;
//但是a++会先让a去参与运算,后对a的值进行自增操作;
//而++a会先让a的值进行自增操作,后让a去参与运算;
b=3;
b--; //等价于b=b-1;
--b; //等价于b=b-1;
//虽然b--和--b本质上都是让b的值自减1;
//但是b--会先让b去参与运算,后对b的值进行自减操作;
//而--b会先让b的值进行自减操作,后让b去参与运算;
//幂运算 2^3 2*2*2 == 8
//Math.pow(2,3);
double pow =Math.pow(2,3);
System.out.println(pow);
逻辑运算符和条件运算符
- 逻辑运算符
- 与(and),或(or),非(取反)
- 逻辑与"&&“,逻辑或”||“,非”!"
逻辑与:逻辑与运算,两个变量都为真,结果才为true;即同真则真,一假则假
逻辑或:逻辑或运算,两个变量有一个为真,则结果才为true;即有真则真,同假则假
非:如果原来为真,则运算过后为假。如果原来为假,则运算过后为真。
package operator;
public class Demo02 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b)); //逻辑与运算:同真则真,一假则假
System.out.println("a||b:"+(a||b)); //逻辑或运算:一真则真,同假则假
System.out.println("!(a&&b):"+!(a&&b)); //取反:原来为真,运算后为假;原来为假,运算后为真
// + 运算符 负责将字符串和表达式或者变量连接起来的
}
}
- 短路运算
- 逻辑与运算符:从左向右依次计算,如果左侧的表达式为false时则不会执行右侧的表达式。当左侧的表达式为true时,才会去看右侧的表达式为true还是false
- 逻辑或运算符:从左向右依次计算,如果左侧的表达式为true时则不会去执行右侧的表达式。当左侧的表达式为false时,才会去看右侧的表达式为true还是false
位运算符
package operator;
public class Demo03 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
A&B 同1为1,有0则0
A|B 有1为1,同0则0
A^B 相同为0,不同为1
~B 原为0运算后为1,原为1运算后为0
2*8 = 16 2*2*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 Demo04 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b; //a=a+b;
a-=b; //a=a-b;
System.out.println(a);
//字符串连接符 + 在+两侧出现了String类型都转换为String链接起来
System.out.println(a+b);
System.out.println(""+a+b);//1020
System.out.println(a+b+"");//30
}
}
条件运算符
package operator;
//三元运算符
public class Demo05 {
public static void main(String[] args) {
// x?y:z
// 如果x==true,则结果为y,否则为z
int score = 80;
String type = score <60?"不及格":"及格"; //必须掌握
// if
System.out.println(type);
}
}
运算符优先级
-
C语言当中的优先级:逗号运算符,赋值运算符,条件运算符,逻辑运算符,位运算符,关系运算符,移位运算符,算数运算符,单目运算符
-
Java当中的优先级:推荐多使用()
-
类别 操作符 关联性 后缀 () [] . (点操作符) 左到右 一元 expr++ expr– 从左到右 一元 ++expr --expr + - ~ ! 从右到左 乘性 * /% 左到右 加性 + - 左到右 移位 >> >>> << 左到右 关系 > >= < <= 左到右 相等 == != 左到右 按位与 & 左到右 按位异或 ^ 左到右 按位或 | 左到右 逻辑与 && 左到右 逻辑或 | | 左到右 条件 ?: 从右到左 赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左 逗号 , 左到右
包机制
简述
-
包本质上就是一个文件夹
-
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
-
包语句的语法格式为:
-
package pkg1[.pkg2[.pkg3..]];
-
-
一般利用公司域名倒置作为包名;
-
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用"import"语句可完成此功能
-
import package1[.package2...].(classname|*);
-
注意点
-
尽量不要让不同包下的不同类重名,否则当你想要导入该类时会报错
-
Java中有些已经定义好但是没有导入的,应用时一定先要导入包否则会报错
-
当包下文件过多可以使用通配符"*"来导入,导入这个包下所有的类
JavaDoc
- javadoc命令时用来 生成自己API文档的
- 参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回情况
- @throws 异常抛出情况
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
面向百度编程!
基础部分的一切知识,后面几乎每天都会用
参考视频:B站-遇见狂神说