Java基础笔记二
本文章是作者学习B站系列视频《狂神说Java》与经典书籍《Java核心技术》的记录笔记与心得,创作不易,希望能够得到您的支持。
类型转换
Java是强类型语言,所以进行有些运算的时候,需要用到类型转换
- 各个数据类型的优先级:
byte,short,char->int->long->float->double
例如:
public class Transform{
public static void main(String[] arg){
int i=128;
// byte b=i 错误,不能把一个int类型的值赋给byte
byte b=(byte)i;//强制转换
//数据类型完成转换,但是发生内存溢出的问题
}
}
- 强制类型转换:高->低
- 自动类型转换:低->高
public class Transform{
public static void main(String[] arg){
int i=128;
double b=i;//int类型转换为double,自动转换
}
}
注意点:
-
不能对bool值进行转换
-
不能把对象类型转换为不相干的类型
-
在把高容量转换为低容量的时候,强制转换
-
转换的时候可能存在内存溢出,或者精度问题
System.out.println((int)-45.89f);//输出-45
//出现了精度问题
public class BigNumber{
public static void main()
{
//操作大数时,数字之间可以用下划线分割(JDK新特性)
int money=10_0000_0000;
int years=20;
int total1=money*years;//-1474836480,计算时已经溢出,错误
long total2=money*years;//溢出,因为在赋值前完成计算,但是计算时已经溢出,错误
long total3=(money*(long)years);//先把一个数转换为long,正确
}
}
变量
变量就是可以变化的量。由于Java是一种强类型语言,每个变量都必须声明其类型。变量是最基本的存储单元,必须包括变量名,变量类型和作用域。
定义变量的格式:
数据类型+变量名=值
-
变量类型可以是基本类型,也可以是引用类型
-
变量名必须合法
-
每一个声明都是完整语句,必须以分号结束
-
尽管$是一个合法的Java字符,但是不建议在代码中使用。它只用在Java编译器或其他工具生成的名字中
-
不能使用Java保留字(关键字)作为变量名,且变量名大小写敏感
变量的作用域
public class Scope{
String name;
int age;
//main方法
public static void main(String[] args){
//局部变量:使用前必须声明和初始化值
int i=10;//i只在上下两个花括号中有效
System.out.println(i);
//变量类型 变量名字=new Scope();
Scope scope=new Scope();
System.out.println(scope.age);//0
System.out.println(scope.name);//null
//实例变量:在类里面,方法外面,从属于对象,如果不自行初始化,则默认为0
//布尔变量:默认为false
//除了基本类型,其它都是null
//类变量 用static修饰
}
}
常量
-
常量可以理解为一种特殊的变量,利用关键字final
-
习惯上,常量的名字一般用大写
-
常量一经赋值,不能再更改
public class Final{
final static double PI=3.14;
//final 与 static 都是修饰符,不存在先后顺序
public static void main(String[] args){
System.out.println(PI);
}
}
变量的命名规范
-
类成员变量:首字母小写+驼峰原则(除第一个单词外,之后单词首字母大写)
-
局部变量:同上
-
常量:大写字母(单词与单词之间用下划线隔开)
-
类名:首字母大写+驼峰原则
-
方法名:首字母小写+驼峰原则
运算符
二元运算符
public class Operator1{
public static void main(String[] args){
//"+,-,*,/,%"为二元运算符
int a=10;
int b=20;
int c=25;
int d=25;
System.out.println(a/b);//0,因为小数部分被抹去
System.out.println(a/(double)b);//0.5
System.out.println(c%a);//5,计算c/a所得的余数
//a+=10,表示a=a+10;
//字符串连接符:+
}
}
关系运算符
关系运算符返回的结果:正确/错误,是布尔值
public class Operator2{
public static void main(String[] rgs){
int a=10;
int b=20;
System.out.println(a>b);//false
System.out.println(a=b);//false
System.out.println(a!=b);//true
}
}
一元运算符
- 自增、自减运算符
-
前置运算符:先增减,再运算
-
后置运算符:先运算,再增减
public class Operator3{
public static void main(String[] args){
int a=3;
int b=a++;
System.out.println(a);
//4,此时先把a=3赋给b,之后a+1,则输出a等于4
int c=++a;
System.out.println(a);
//5,a经过了两次自增,则为5
System.out.println(b);
//3,b被赋值为3后a才自增,a的增加对b没有造成影响,所以b不会改变
System.out.println(c);
//5,a自增两次后得到5,然后赋值给c,则c输出为5
}
}
幂运算
public class operator4{
public static void main(String[] args){
double pow=Math.pow(2,3);
//使用工具类来操作
}
}
逻辑运算符
public class operator5
{
public static void main(String[] args){
boolean a=true;
boolean b=false;
System.out.println("a&&b"+(a&&b));
//false,二者均为真是结果为真,其余均为假
System.out.println("a||b"+(a||b));
//true,二者均为假是结果为假,其余均为真
System.out.println("!a&&b"+!(a&&b));
//true,先进行与运算,然后取非
//断路问题:在进行与运算时,当第一个值为假是,不会进行第二步操作
int c=5;
boolean d=(c<4)&&(c++<4);
System.out.println(c);//5,c<4为假,不会进行c自增操作
}
}
位运算符
/*
A=0011 1100;
B=0000 1101;
&,|,^ 三个运算符分别对每一位进行操作(分别对应与或非三种运算法则)
*/
System.out.println(2<<3);//16
//<< >>表示左移,右移运算符,效率较高
//左移表示乘2,右移表示除以2
三元运算符
public class operator6
{
public static void main(String[] args){
//x?y:z 表示如果x为真,则进行y操作,否则进行z操作
int score=70;
int a=0;
(score>60)?a=10:a=20;
//70>60为真,则进行a=10的操作
}
}