02java基础知识
01Java里的注释
-
单行注释 //
-
-
javadoc 文档注释 /** */
-
注释(书写注释是一个非常好的习惯)
02 标识符
-
java所有的组成部分都需要名字,类名、变量名以及方法名都被称为标识符
03 数据类型
01强数据类型
-
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
02Java数据乐星分为两大类
-
基本类型
-
整数类型
-
byte
-
short
-
int
-
long long num = 40L long类型要再数字后面加个L
-
-
小数
-
float float num1 = 50.1F float 类型要在数字后面加个F
-
double
-
-
字符
-
char
-
-
布尔值:是非
-
true
-
false
-
-
-
引用类型
-
类
-
接口
-
数组
-
04数据类型扩展及面试题讲解
-
整数扩展(进制)
-
二进制0b
-
八进制0
-
十进制
-
十六进制0x 0~9,A~F,
-
浮点数扩展 银行业务怎么表示? 钱
-
float 有限 离散 舍入误差 大约 接近但不等于 最好完全避免使用浮点数进行比较!
-
BigDecimal 数学工具类( 银行业务)
-
字符扩展
char c1 ='a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//sout
System.out.println(c2);
System.out.println((int)c2);//强制转换
//所有的字符本质还是数字
//编码Unicode 表:(97 = a 65 = A) 0-65536 2的16次方
-
转义字符
-
\t 制表符
-
\n 换行
-
对象内存分析
//对象 从内存分析
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);==比较的是地址。如果比较的对象是基本数据类型,则比较的是数值是否一致。如果比较的是引用数据类型,则比较的是对象类型的地址是否一致。
String是引用类型的变量。new是新建一个内存堆,新的地址,比较的是指向内存地址是否相同。第二个是常量池中,比较的是内容是否一致。
-
布尔值写法
//布尔值拓展
boolean flag = true;
if (flag==true){}//新手
if (flag){}//老手
05类型转换
-
由于Java是强类型语言,所以有些运算需要进行类型转换。
低-------------高
byte,short,char-> int -> long -> float -> double
-
运算中,不同类型的数据先转化为同一类型,然后进行运算。
package base;
public class Demo5 {
public static void main(String[] args) {
int i =128;
byte b = (byte)i;//byte的区间是-128-127 ,超过范围就随机赋值
System.out.println(i);
System.out.println(b);
//强制转换 (类型)变量名 高--低
//自动转换 低--高
int ii =128;
double bb = ii;
System.out.println(ii);
System.out.println(bb);
/*
注意点:
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 d = c+1;
System.out.println(d);
}
}
package base;
public class Demo6 {
public static void main(String[] args) {
// 操作比较大的数的时候,注意溢出问题
//jdk新特性,数字之间可以用下划线分隔
int money = 10_0000_0000;
int years = 20;
int total = money*years;//-1474836480,结果本应该是200_0000_0000,计算的时候已经溢出了。
long total2 = money*years;//-1474836480,默认是int类型,转换之前已经存在问题了
long total3 = money*((long)years);//先把一个数先转为long
System.out.println(total);
System.out.println(total2);
System.out.println(total3);
}
}
06变量、常量、作用域
1.变量
-
变量:就是可以变化的量。
-
java是一种强类型的语言,每个变量都必须声明其类型。
-
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
-
type varName [=value] [{, varName[=value]}];
-
//数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量(但是最好不要在一行写多个变量,不具有良好的可读性。)
package base;
public class Demo7 {
public static void main(String[] args) {
//int a,b,c
int a=1,b=2,c=3;//写在一行,可读性低。
String name = "ysl";//引用类型
char x = 'x';
double pi = 3.14;
}
}
-
-
注意事项:
-
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
-
变量名必须是合法的标识符。
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
-
2.变量作用域
-
类变量
-
实例变量
-
局部变量
public class Demo08 {
//类变量 static
static double salary = 2500;
//属性:变量
//实例变量:从属于对象;如果不自行初始化,这个类型的默认值0 0.0
//布尔值:默认false
//除了基本类型,其余的默认值都是null
String name;
int age;
//主程序方法
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(){
}
}
3.常量
-
常量(Constant):初始化后不能再改变值,不会变动的值。
-
所谓常量可以理解为一种特殊的变量,它的值被设定后,再程序运行过程中不允许被改变。
-
final 常量名 = 值;
final double PI = 3.14;
-
常量名一般使用大写字符。
package base;
public class Demo09 {
//修饰符,不存在先后顺序,还有public,private
static final double P = 3.14;
public static void main(String[] args) {
System.out.println(P);
}
}
4.变量的命名规范
-
所有变量/方法/类名:见名知意
驼峰原则:除了第一个单词除外,后面的单词首字母大写,如:lastName
-
类成员变量:首字母小写和驼峰原则:monthSalary
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则:Man,GoodMan
-
方法名:首字母小写和驼峰原则:run(),runRun()
07运算符
1.java语言支持如下运算符:
-
算数运算符:+, -, *, /, %, ++, --
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl+D 复制当前行到下一行
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);
//a/b为int类型,结果为0.5,向下取整但是最后出来为0;
//因此要提前把一个数换类型。
}
}
package operator;
public class Demo02 {
public static void main(String[] args) {
long a = 123123123123123L;
int b = 123;
short c = 10;
byte d = 8;
//没有long,运算都为int
//不同类型混合运算无论是赋值还是运算都是向最高位转
System.out.println(a+b+c+d);//Long
System.out.println(b+c+d);//int
//System.out.println((String)(c+d)); //int//Inconvertible types; cannot cast 'int' to 'java.lang.String'
System.out.println((double)c+d);
}
}
/**
答案:
123123123123264
141
18
18.0
*/
package operator;
//自增,自减
public class Demo04 {
public static void main(String[] args) {
//++, -- 自增,自减,一元运算符
int a = 3;
int b = a++;//执行完这行代码后,先给b赋值,再自增
//a = a+1;
System.out.println("a=:"+a);
System.out.println("=======");
//a = a+1;
int c = ++a;//执行完这行代码前,先自增,再给c赋值
System.out.println("a=:"+a);
System.out.println("b=:"+b);
System.out.println("c=:"+c);
//幂运算 很多运算使用工具类
double pow = Math.pow(2,3);
System.out.println(pow);
}
}
-
赋值运算符:=
-
关系运算符:>,<,>=, <=,==,!=instanceof
package operator;
public class Demo3 {
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 布尔值
//if
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);
}
}
/**
答案:
1
false
true
false
true
*/
-
逻辑运算符:&&,||,!
package operator;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(b&&a));//逻辑与运算:两个变量都为真,结果才为真
System.out.println("a||b:"+(a||b));//逻辑或运算:两个变量有一个为真,则结果为true
System.out.println("!(a&&b):"+!(a&&b));//如果是真,则变为假,如果为假,则变为真。
//短路运算 第一个是flase 就不会进行下一个了。
int c = 5;
boolean d = (c<4)&&(c++<4);
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 = 0000 1100(如果两个都为1,结果为1)
A/B = 0011 1101(对应位都是0结果为0,不然为1)
A^B = 0011 0001 (对应位置相同就为0,不同就为1)
~B = 1111 0010(与本身完全相反)
2*8=16怎么运算最快 2*2*2*2
效率极高
<< *2 左移
>> /2 右移
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0001 0000 16
*/
}
}
-
条件运算符: ?:
package operator;
//三元运算符
public class Demo08 {
public static void main(String[] args) {
//x ? y:z
//如果 x==true,则结果为y,否则为z
int score = 80;
//if
String type = score <60? "bu及格":"及格";
}
}
-
扩展赋值运算符:+=,-=,*=,/=
package operator;
public class Demo07 {
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
System.out.println(""+a+b);
System.out.println(a+b+"");//只要不是在最末尾,都会把其余转化成String
}
}
2.优先级
-
算术运算符、赋值运算符、逻辑运算符、关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术、逻辑、关系等运算,最后才进行赋值操作。
-
算术运算符内部各符号的优先级顺序依次为:+正号、-负号 > 乘号*、除号/、取余数符号% > 加号+、减号-。
-
关系运算符,关系符号包括等号、不等号、大于号、小于号等等,它们互相之间的优先级是一样的。
-
逻辑运算最终的优先级顺序为:逻辑非运算! > 关系运算符(含等号、不等号) > 其它逻辑运算符(含与符号&、或符号|、异或符号^)
-
总结:总结一下,倘若没有圆括号加以约束,那么对于数值变量来说,几种运算符的优先级顺序依次为:正号、负号 > 乘号、除号、取余号 > 加号、减号 > 大于号、等号、小于号、不等号 > 各种赋值符号;对于布尔变量来说,相关运算符的优先级顺序依次为:逻辑非 > 等号、不等号 > 逻辑与、或、异或 > 各种赋值符号。
08包机制
1.包
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
2.包语句的语法格式为:
-
package pkg1[ .pkg2[. pkg3...]];
-
一般利用公司域名倒置作为包名;com.baidu.com
-
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可以完成此功能。
import package1.[.package2...].(classname|*);
eg.
import com.kuang.base.*;(导入这个包的所有类)
09JavaDoc
javadoc命令是用来生成自己的API文档的
-
参数信息:
-
@author 作者名
-
@version 版本号
-
@since 指明需要最早使用的jdk版本
-
@param 参数名
-
@return 返回值情况
-
@throws 异常抛出情况
package base; /** * @author ysl * @version 1.0 * @since 1.8 */ public class Doc { String name; /** * * @param name * @return * @throws Exception */ public String test(String name)throws Exception { return name; } //kuangshen 是通过命令行 javadoc 参数 Java文件 //作业:学会查找使用IDEA生产JavaDoc文档! 面向百度编程 }-
IDLE上操作进行生成dos文档
-
浙公网安备 33010602011771号