写在前面
你们好,我是小庄。很高兴能和你们一起学习Java。如果您对Java感兴趣的话可关注我的动态.
写博文是一种习惯,在这过程中能够梳理和巩固知识。
一、Java结构和main函数
以下是文件名为Test.java的文件
/*
*创建成功后,文件名为Test.java,类名和文件名保持一致
*/
public class Test{//Test是类名
//main函数的定义是固定的,必须写完整
public static void main(String[] args){
//这个是单行注释
int a=1;
/**
*这个是多行注释
*/
System.out.println("a="+a);
}
}
//Test2类
class Test2{
}
总结:
- 文件名必须和类名保持一致,否则会报错
- class类或者方法是由一对”{}“组成,缺一个多一个都会报错
- 每一行都要在后面加分号" ; "结束,否则报错
- 一个java文件可以有多个Class类,但只有一个public,否则报错
- 一个class类里面最多只能有一个main函数,并且main函数不能当做方法被调用
- Java区分大小写
二、基本类型
八种基本类型
1、boolean 布尔类型
只有true
和false
,默认值是false
2、byte 字节类型
1byte = 8bits(8位)
值的范围是: -128到127,默认值为0
例题1:
byte a=(byte)-129;
System.out.println("a="+a);
byte b=(byte)128;
System.out.println("b="+b);
输出:a=127
b=-128
解析如图:
3、short 短整型
4、 int 整型
5、long 长整型
6、float 单精度浮点类型
7、double 双精度浮点类型
8、char 字符
例题2:
小结:
- float类型赋值时,必须末尾加f
- 当f类型转double类型时,值会变化
- 当两个浮点型数值无限接近时,两个数值相等
三、变量和常量
声明变量:前面必须要有类型,变量名必须是一个以字母开头并由字母或数字构成的序列。不能使用Java保留字作为变量名;
int a; //正确
int a12; //正确
double public; //错误,public为Java保留字
int %d; //错误,必须以一个字母开头,%不是字母
声明变量的同时可以初始化:
int a=3;
常量:在类型前面使用关键字final;只能被赋值一次,一旦被赋值后,就不能更改了,常量名习惯用大写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXI41W52-1625674611142)(盘点Java基础知识(每天进步一点点).assets/1.png)]
四、运算符
运算符 | 作用 |
---|---|
+ | 在数值运算时作为加法,在两个字符串中间作为连接符 |
- | 数值运算中的减法 |
* | 在数值运算时作为乘法 |
/ | 在数值运算时做除法,并只取整数部分,小数点后面去掉 |
% | 模运算,只取余数,整数部分去掉 |
= | 这个不是等于字符,而是赋值运算符 |
&& | 与,表示所有数条件都要同时满足,否则返回flase |
|| | 或,表示多个数其中一个条件条件满足即返回ture ,否则返回flase |
! | 非,反义作用,当原条件为true ,添加!后,条件变成flase |
== | 等于,若两边的数不相等,则返回flase |
!= | 不等于,若两边的数相等,则返回flase |
<< | 将运算数的二进制整体左移指定位数,低位用0补齐 |
>> | 将运算数的二进制整体右移指定位数,整数高位用0补齐,负数高位用1补齐(保持负数符号不变) |
, | 逗号运算符,将表达式用逗号分开进行运算 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
举例如下
public class Test{
public static void main(String[] args){
int a=2,b=3;//逗号运算符和赋值运算符的使用,逗号让两个表达式分开赋值
int c;
c=a+b;//此时的+是加法运算,c的值为5
c=a-b;//减法运算,c=-1
c=a*b;//乘法运算,c=6;
c=a/b;//除法运算,c=0;只取整数部分
c=a%b;//模运算,c=2
System.out.println(a==b);//等于判断,此时输出flase
System.out.println(a!=b);//不等于判断,此时输出true
//十进制:2 二进制:10
//左移后二进制为:100,此时十进制为:4
System.out.println(a<<1);//左位运算,向左移动一位,输出4
//十进制:3 二进制:11
//右移一位后为:1,十进制为:1
System.out.println(b>>1);//右位运算,向右移动一位,正数,用0补齐,输出1
System.out.println("a="+a);//此时a作为连接符,输出a=2
}
}
五、字符串与输入输出
1、字符串
字符串(String)的定义:String类型,字符串使用双引号包起来
String str="";
字符串的拼接:+
String a,b,c;//定义字符串a,字符串b,字符串c
a="1";//给字符串a赋值"1"
b="2";//给字符串b赋值"2"
c=a+b;//此时,c="12",这就是字符串的拼接
检测字符串是否相等equals方法
String a="1", b="2";//定义两个字符串,区分大小写
a.equals(b);//判断字符串a是否等于字符串b,显然不相等,返回false
获取字符串长度方法:length()
检测字符串是否为空
String str="";
//方法一:
if(str.length()==0)//字符串长度为0时是空串
//方法二
if(str.equals(""))//字符串是否等于"" -->空
2、输入输出
输入:需要在最顶部导入包:import java.util.Scanner;
//Scanner是输入类,in可以自定义,但很少定义其他名;通常默认使用,是为了方便其他程序员读我们的代码
Scanner in=new Scanner(System.in);
//输入一行数据(可能包含空格),用字符串name接收.比如输入:Hello Word!
String name=in.nextLine();//此时name的值为:"Hello Word!"
//输入一行数据,如果空格,则后面数据不接收,只接收第一个单词;比如输入:Hello word!
String word=in.next();//此时word的值为:"Hello"
int age=in.nextInt();//输入一个整数,用age变量接收
格式化输出:下面只列举常用的
//%s表示输出String类型数据
System.out.printf("%s", "Hello word");
// %n表示换行
System.out.printf("%n");
//%d表示输出int类型数据
System.out.printf("%d",12);
// %S将字符串以大写形式输出
System.out.printf("%S", "Hello");//最后输出HELLO
//%c表示将char类型数据输出
System.out.printf("%c",'a');
//%f表示将浮点类型数据输出
System.out.printf("%f",3.2);
//%.2f表示将浮点类型数据输出,并只保留两位小数,四舍五入原则
System.out.printf("%.2f",2.225);//输出:2.23
//%x表示将十六进制整数输出
System.out.printf("%x",9f);
//%b表示将布尔类型数据输出
System.out.printf("%b",true);
//%o表示将八进制数据输出
System.out.printf("%o",237);//输出结果为355
六、选择和循环结构
1、if语句
//当表达式返回值为true时执行a=1;
if(表达式) {a=1;}
//表达式返回值为true时执行a=1;否则执行a=2;
if(表达式) {a=1;}
else{a=2;}
//当if表达式返回值为true时执行a=1;否则执行else if表达式,当为true时值执行a=2;否则执行a=3;
if(表达式){a=1;}
else if(表达式){a=2;}
else{a=3;}
2、switch语句
switch(表达式)//当条件表达式成立时(true)执行下面语句
{
case 条件1: 执行语句;
case 条件2: 执行语句;
default: 必定执行的语句
}
例子:
int a=2;
switch(a){
case 1: System.out.println("条件1"); break;
case 2: System.out.println("条件2"); break;
default: System.out.println("必执行条件"); break;
}
输出结果:
条件2
必执行条件
提示:break;需要加在后面,否则还会继续执行下一个case分支语句。容易引发错误,这也是switch很少在程序中使用的原因
3、while语句
while(条件表达式)//当条件表达式成立时(true)执行下面语句
{
执行的语句
}
do{
执行语句
}while(条件表达式);
例子:
int a=5;
while(a>5){//当a<=1时条件不满足
System.out.print(a);//这条语句不执行
a--;
}
do{
System.out.print(a);//最后输出结果5
a--;
}while(a>5);
a=5;//重新赋值为5
输出结果:
5
注意: 要限定条件,否则会进入死循环,一直执行下去,直到电脑死机或关机,慎用
小结:
- while: 先判断 再执行 条件不成立 循环体 一遍都不执行
- do…while: 先执行 再判断 条件不成立 循环体 至少执行一遍
4、for语句
最简形式: for( ; ; )
for(单次表达式;条件表达式;末尾循环体)
{
中间循环体;
}
例子:
int a=0
for(a;a<10;a++)//a从0加到9都执行下面循环,当a=10时,循环退出
{
System.out.print(a);
}
结果:
0123456789
循环嵌套
for(单次表达式;条件表达式;末尾循环体){
for(单次表达式;条件表达式;末尾循环体){
中间循环体;
}
}
例子
int i,j;
for(i=0;i<3;i++){
for(j=0;j<2;j++){
System.out.println(i+j);//i和j相加
}
System.out.println("内循环退出---,外循环i+1");
}
结果:
0 //此时i=0,j=0
1 //此时i=0,j=1
内循环退出---
1 //此时i=1,j=0
2 //此时i=1,j=1
内循环退出---
2 //此时i=2,j=0
3 //此时i=2,j=1
内循环退出--
5、continue和break
continue:退出当前循环
break:中断循环
区别如下:
//使用continue
int i;
for(i=1;i<4;i++){
if(i==2){//此时i=2,退出此次循环,但循环还在继续
continue;
}
System.out.print(i);//i=1和i=3都执行成功,i=2中断执行,直到i=4循环才退出
}
结果:
13
//使用break
int i;
for(i=1;i<4;i++){
if(i==2){//此时i=2,中断循环,循环退出
break;
}
System.out.print(i);//i=1执行成功,当i=2时循环已经退出
}
结果:
1
七、大数、数组
1、大数
为什么用大数,什么是大数?
大数是java.math包中很有用的两个类:BigInteger和BigDecimal,因为这两个类的开头都有Big,所以我们叫它大数。
在实际应用场景中,对数的精度要求很高,基本的整型和浮点数不能满足需求,所以需要用到大数
//valueOf()方法将int类型的数据转换为大数,则大数可以进行计算,int类型的数据不能直接和大数进行计算
BigInteger a=BigInteger.valueOf(20);
//BigInteger不能使用算术运算符(+和*)进行计算
//如果想对BigInteger进行加运算时,如下操作
BigInteger b=BigInteger.valueOf(10);
BigInteger c=a.add(b);//此时,b为其他的BigInteger数据,c=a+b
//如果想对BigInteger进行乘运算时,如下操作
BigInteger d=c.multiply(a);//d=c*a
提示:BigDecimal是对浮点类型进行处理,其他使用的方法和BigInteger一样
举例:BigDecimal f=BigDecimal.valueOf(3.22);
注意:使用大数时,需要导入:import java.math;这个类包
2、数组
声明数组
int[] a;//只是声明,并没有初始化,也可以这样声明 int a[];
int[] a=new int[10];//声明数组并初始化一个可以存储10个整数的数组
访问数组
//给数组赋值
//声明并初始化10个长度的整型数组
int[] a=new int[10];
//定义输入
Scanner in=new Scanner(System.in);
//a.length表示获取数组的长度。注意:获取字符串长度使用的是length(),多了()
for(int i=0;i<a.length;i++){//进行遍历数组逐个赋值
a[i]=in.nextInt();
}
//获取数组中第i位数,数组索引从0开始
int b=a[i];//此时b的值可以获取索引为i的整数
//for each遍历数组方式
for(int element:a){//a表示数组的变量,element表示数组的元素
System.out.println(element);//对数组的元素逐个输出
}
数组拷贝
//方法一,通过遍历数组,同时把值赋值给新的数组
int[] a=new int[10];//假设数组a中已经有值
int lengths=a.length;//获取a的长度
int[] b=new int[lengths];//数组b中是空数组
for(int i=0;i<a.length;i++){//遍历数组a
b[i]=a[i];//将数组a的元素逐个赋值给数组b
}
//方法二,通过java库的类使用其方法进行拷贝
//这里只定义数组,没有初始化整数数组的存储长度,这个是关键点
int[] c;
//Arrays是java库中的类,copyOf是方法,第二个参数是定义数组空间长度
c=Arrays.copyOf(a,a.length);
小结:方法一中,数组b的长度不灵活,如果不知道数组a的长度时,定义数组b长度数值小则报错,定义长则浪费空间
总的来说,方法二相对比较好,灵活,运行速度快一点
上一篇: Java环境搭建
下一篇:Java对象和类