今天周末在家把Java基础学完了,把第三天的一部分一起复制过来,这样回头看的时候容易查缺补漏。
关键字
关键字不能作为文件名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0g02N1I8-1613919104272)(C:\Users\DD\Desktop\Java\TU\Java关键字.png)]
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识。
- 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线(__)开始
- 首字母之后可以是字母(A-Z或者a-z),美元符($),下划线(__)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符是大小写敏感的
- 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,Low
数据类型
强类型语言-----JAVA(安全性高,牺牲一定速度)
要求变量的使用严格符合规定,所有变量都必须先定义后才能使用
弱类型语言–VB/JS等(和强类型相反)
Java的数据类型分为两大类
基本类型(primitive type)
数值类型 | 整数类型 | byte占1个字节范围:-128-127 |
---|---|---|
short占2个字节范围:-32768-32767 | ||
21亿 | int占4个字节范围:-2147483648-2147483647 | |
long占8个字节范围:9开头,19位数 | ||
浮点类型 | float占4个字节 | |
double占8个字节 | ||
字符类型 | chart占2个字节 | |
boolean类型 | 占1位其值只有true和false两个 |
//整数
int n0 = 1111; //最常用
byte n1 = -128;
short n2 = 3276;
long n4 = 1234567890123456789L; //Long类型需要在数字后面加L
//小数:浮点数
float n5 = 50.1231111F; //float类型需要在数字后面加F
double n6 = 3.333333333333333333333;
//字符
char n7 = 'a';
char n8 = '帅';
//字符串,String不是关键字,是类
//String name = "哈哈哈";
//布尔值
boolean flag = true;
boolean Flag = false;
什么是字节
- 位(bit):计算机内的最小单位,11001100是一个八位的二进制数
- 字节(byte):计算机中数据处理的基本单位,习惯用大写B表示
- 1B(byte,字节)=8bit (位)
- 字符:指计算机中使用的字母、数字、字和符号
- 1B=8b 1024B=1KB 1024KB=1M 1024M=1G
引用类型(reference type)
类 //接口 //数组
数据类型的扩展
public class HelloWorld {
public static void main(String[] args) {
//整数拓展:进制 二进制0b 十进制 八进制0 十六进制0x
int i1 = 10;
int i2 = 011; //八进制0
int i3 = 0x14567; //十六进制0x 0-9 A-F
int i4 = 0b1111; //二进制0b
//我个人的理解是,这个公示最终是以10进制的形式表达出来的
//无论是八进制的0开头还是,十六进制的0x开头
//011 也就是八进制的是11 ,代表十进制的9
//转换过程
//int i2 = 08; 不行,因为八进制里面没有8,也没有9
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println("===============分隔符=====================");
//===============================================================
//浮点数扩展: 银行业务怎么表示?钱
//BigDecimal 数学工具类
//===============================================================
//float 有限 离散 舍入误差 大约 接近但不等于的
//double
//最好不要使用浮点数进行比较
float f1 =0.1f; //0.1
double f2=1.0/10; //0.1
System.out.println(f1==f2); //false
float d1 = 1321354313154354f;
float d2= d1+1;
System.out.println(d1==d2); //true
System.out.println("===============分隔符=====================");
//===============================================================
//字符串拓展
//===============================================================
char c1 = 'D';
char c2 = '帅';
System.out.println(c1);
System.out.println((int)c1);//强制转换
System.out.println(c2);
System.out.println((int)c2);//强制转换
System.out.println("===============分隔符=====================");
//所有的字符本质还是数字
//编码 Unicode表 68=D 24069=帅 2字节 0-65536
//转义字符
// \t 制表符
// \n 换行
//===============================================================
//布尔值拓展
//===============================================================
boolean flag = true;
if(flag==true){} //新手
if(flag){};
//Less is more
}
}
类型转换
由于Java是强类型语言,所以有些运算要进行的时候,需要用到类型转换。
低----------------------------------------高(容量)
byte,short,char --int–long–float–doubule
运算中,不同类型的数据先转化为同一类型,然后进行运算。
int i = 128;
byte b = (byte)i; //-128 内存溢出
//强制转换 (类型)变量名 高--低
//自动转换 低--高 可以直接转
System.out.println(i);
System.out.println(b);
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转为不相干的类型
3.在高容量转换到低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
*/
System.out.println("===========");
System.out.println((int)23.7); //23
System.out.println((int)-45.86f); //-45
System.out.println("===========");
char c = 'a';
int d = c+1;
System.out.println(d);//98
System.out.println((char)d);//b
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total1 = money*years; //-1474836480,溢出了,int容量只到21亿
long total2 = money*years; //默认是int,转换之前已经存在问题
long total3 = money*((long)years);//先把一个数转为long,成功200亿
System.out.println(total1);
System.out.println(total2);
System.out.println(total3);
//注意数字后面的以大写的字母结尾 比如200000L ,45.666F
变量
- 变量是什么:就是可以变化的量!
- Java是一种强类型语言, 每个变量都必须声明其类型。
- Java变量是程序中最基本的存储单元, 其要素包括变量名, 变量类型和作用域。
type varName [=value] [{, varName[=value] } ];
//数据类型变量名=值;可以使用逗号隔开来声明多个同类型变量。
//int a,b,c; //可定义多给元素,不推荐
//int a=1,b=2,c=3;//程序可读性
String name = "哈哈哈";
char x = 'X';
double pi = 3.14;
变量的作用域
- 类变量
- 实例变量
- 局部变量
public class Demon04 {
//属性:变量
//类变量 static 从属于Demon04 ,和类一起出现一起消失
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 Demon04();
Demon04 demon04 = new Demon04();
System.out.println(demon04.age);
System.out.println(demon04.name);
//类变量 static
System.out.println(salary);
}
//其他方法
public void add(){
}
}
常量
-
常量(Constant) :初始化(initialize) 后不能再改变值!不会变动的值。
-
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
final常量名=值;
final double PI=3.14; -
常量名一般使用大写字符。
public class Demon05 {
//修饰符,不存在先后顺序,static public 都是,等等
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:month Salary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man, GoodMan
- 方法名:首字母小写和驼峰原则:run() , run Run()
基础运算
- 算数运算符:+,-,*,/,%(取余),++,–
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=(不等于),instanceof (百度的:严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,老师略过,应该是要在后面说)
- 逻辑运算符:&& 与, || 或 , ! 非
- 位运算符:& , | , ^ , ~ , >> , << , >>>(老师说了解,没展开说,我百度也是位移的意思,不过2个3个有区别,先略过)
- 条件运算符 ? :
- 扩展赋值运算符:+= , -= , *= , /= (偷懒)
//二元运算符
int a = 10;
int b = 20;
int c = 30;
int d = 40;
System.out.println(a+b); //30
System.out.println(a-b); //-10
System.out.println(a*b); //200
System.out.println(a/(double)b); //0 因为默认 ab都是int整数,要先改变一个类型
long a = 466L;
int b = 123;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d);//有long类型的运算 结果为long
System.out.println(b+c+d);//其余都为int
System.out.println(c+d);//其余都为int
//cast转换的意思
double f = 3.33;
float e = 0.5F;
System.out.println(a+b+c+d+f); //有double的话,结果就是double
System.out.println(a+e);//float也大过long
//关系运算符返回的结果:正确 错误 布尔值
int a = 10;
int b = 20;
int c = 21;
System.out.println(c%a);//取余,模运算 c%a 21/20=2.....1
System.out.println(a>b); //false
System.out.println(a<b); //true
System.out.println(a==b);//false
System.out.println(a!=b);//true
// ++ -- 自增 自减 一元运算
int a = 3;
int b = a++; //执行这行代码后,先给b赋值,a再自增
//a = a + 1;
System.out.println(a);// a=4
//a++ a = a + 1;
int c = ++a;//执行这行代码前,a先自增,a再给c赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算 2^3 2*2*2=8 很多运算使用工具来操作
double pow = Math.pow(2,3);
System.out.println(pow);
// &&与-and ||或-or !非- 取反
boolean a = true;
boolean b = false;
System.out.println("a && b"+(a&&b));//逻辑与运算:两个变量都为真,结果才为true
System.out.println("a || b"+(a||b));//逻辑或运算:两个变量有一个为真,结果即为true
System.out.println("!(a && b)"+!(a&&b));//如果是真,泽变为假,如果是假则变为真
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);//c=5 证明第一个判断是假的,后面的c++没有运行,短路了
A = 0011 1100
B = 0000 1101
-----------------------------------------
A&B 0000 1100 两个都是1才为1 与
A|B 0011 1101 有一个是1即为1 或
A^B 0011 0001 相同是0,不同是1 异或
~B 1111 0010 取反
2*8 = 16 2*2*2*2
//2*8在计算机里最快的计算方式
效率极高
<< *2
>> /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
int a = 10;
int b = 20;
a+=b; // a = a+b 偷懒用,但不建议
a-=b; // a = a-b
System.out.println(a);
//字符串连接符 + ,Stromg
System.out.println(a+b);
System.out.println(""+a+b); //字符串在前面,已经变类型了
System.out.println(a+b+"");//字符串在后面,先运算
//三元运算
// x ? y : z
// 如果x==true ,则结果为y,否则结果为z
int score = 88;
String type = score<60 ? "不及格" : "及格";
//重要,必需掌握
System.out.println(type);
优先级 () 一元运算 加减乘除
包机制
- 包的本质就是文件夹,用于区别类名的命名空间。
- 包语句的语法格式为:
package pkg1[ .pkg2[ .pkg3]]
- 一般利用公司域名导致作为包名;
www.baidu.com com.baidu.www baike wenda
(在Idea中创建com.baidu 包时不能自动创建子级包的情况
点击左边项目结构右上方的小齿轮, 取消勾选compact middle packlages选项)
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可完成此功能
import packeage1[.package2...].(classname|*);
import java.util.Date; //导入java自身的包
import com.Xu.Operator.* //导入Operator下所有的文件
JavaDoc
- JavaDoc命令是用来生成自己API文档的 (文档注释)
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的JDK版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
package com.Xu.Operator;
// 加在类上面就是类的注释
/**
* @author Xu
* @version 1.0
* @since 1.8
*/
public class Doc{
//加在方法上面就是类的注释
String name; //这是一个属性
/**
*
* @param name //param 参数的意思
* @return
* @throws Exception
*/
public String test(String name) throws Exception{ //这是一个方法
return name;
}
}
CMD中命令符–生成JavaDoc文档
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
中间的是防止中文乱码的参数
作业
用IDEA生成JavaDoc文档