Java基础语法
合法标识符的规则:
由字母、数字、下划线“_”、美元符号“$”组成,并且首字母不能是数字。
(关键字也不可以)(汉字也可,很不建议)
判断是否为合法标识符
Character.isJavaIdentifierStart(start);
/*判断首字母是否合法
*输入:一个字符
*如果合法返回true,否则返回false
*/
Character.isJavaIdentifierPart(ch);
/*判断其他(中间)部分是否合法
*输入:一个字符
*如果合法返回true,否则返回false
*/
编译器技巧
输入main,选择第二个,自动生成
public static void main(String[] args) {
//输入Scanner按下Alt+/ 自动导入包
//编译器输入Syso,然后按Alt键+/;自动生成
System.out.println();
}
输入输出
基本操作
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);//建立输入工具
int a = sc.nextInt();//输入
int b = sc.nextInt();
System.out.println(a+b);//输出
sc.close();//关闭键盘输入工具
}
}
常用知识
** 不确定个数输入:** while(sc.hasNext())
常量与变量
常量
java的常量用final
例如:
final int a;
基本数据类型
特点:
不同平台,储存相同
精度从低到高排序
- 字符byte:最小值-128,最大值127,其他同理
- 短整型short:最小-32768,最大32767
- long: 19位
- char:可以储存整数,甚至可以直接与int运算(想输出char,需要进行强制类型转换)。
整数运算时候默认为int类型,小数一直默认为double类型
点击展开问题代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
// 键盘输入工具
//下面赋值没有问题
byte a=12;
short b=120;
int c=120;
long d=1200;
//下面两条语句正确
byte a1=a+1;
short b1=b+1;
//下面两条语句正确
int c1=c+1;
long d1=d+1;
//解决方法
byte a2=(byte)222;
//下面第一条赋值运算错误
float f=1.2;
double dou=1.22;
//解决方法1
float ff=2.3222F;
float fff=2.333f;
//解决方法2
float ffff=(float)2.333;
// reader.close();
// 关闭键盘输入工具
}
}
}
原因:
- 从低精度向高精度赋值,系统自动转换类型
- 如果需要高到低,使用强制类型转换(可能会丢失精度)
输入方式
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//十进制
int i1=12;
System.out.println(i1);
System.out.println();
//二进制标志:0b/0B
int i2=0B110;
int i22=0b110;
System.out.println(i2);
System.out.println(i22);
System.out.println();
//八进制标志:0
int i3=0100;
System.out.println(i3);
System.out.println();
//十六进制标志:0X/0x
int i4=0X100;
System.out.println(i4);
System.out.println();
double d2=1.234e2;// =1.234*10^2=123.4, 实数的第二种表示方式,科学计数法,e表示10。
sc.close();
}
}
输出方式
控制浮点数 小数位
方法0:printf
double c=12.123456;
System.out.printf("%.2f",c);
方法1:
double d = 123.2315455458;
String s = String.format("%.6f", d);//注意是f
//保留6位小数,最后一位四舍五入
System.out.println(s);
方法2:
double b = 123.2315455458;
double c = 123.2315455458;
double d =(double)(Math.round(b*1000))/1000;
//保留3位小数
double e =(double)(Math.round(c*100))/100;
//保留2位小数
方法3:
展开源码
double f = 123.2315455458;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
//保留3位小数,最后一位四舍五入
System.out.println(f1);
方法4:
展开源码
1 DecimalFormat df = new DecimalFormat("#.000"); //#.000保留三位小数,依次类推
2 String f = df.format(123.2315452); //四舍五入
3 System.out.println(f);
精确计算(BigDecimal类)
BigDecimal概述
位置: JAVA.Math
作用: 用来对超过16位有效位的数进行精确的运算。(直接使用Float和Double处理,会丢失精度。)
使用:
String a;
a=sc.next();
BigDecimal a1=new BigDecimal(a);
说明:
1)参数类型为double时,传入的值与方法中的值可能会不同
(因为数值可能:不能表示为任何有限长度的二进制小数)
2)String 构造方法一定等于传入值
(建议优先使用String构造)
3)当double必须用作BigDecimal的源时,
应进行转换:
- 先使用Double.toString(double)方法,
- 然后使用BigDecimal(String)构造方法,将double转换为String。
- 要获取该结果:使用static valueOf(double)方法。
常用方法
add(BigDecimal)
//BigDecimal对象中的值相加,返回BigDecimal对象
subtract(BigDecimal)
//BigDecimal对象中的值相减,返回BigDecimal对象
multiply(BigDecimal)
//BigDecimal对象中的值相乘,返回BigDecimal对象
divide(BigDecimal)
//BigDecimal对象中的值相除,返回BigDecimal对象
toString()
//将BigDecimal对象中的值转换成字符串
doubleValue()
//将BigDecimal对象中的值转换成双精度数
//floatValue() longValue() intValue()同理
实战
/*
输入若干对浮点数,对每对浮点数输出其精确的和与乘积。
有若干次输入
注1:直接使用double类型数据进行运算,无法得到精确值。
注2:输出时直接调用BigDecimal的toString方法。
输入样例:
69.1 0.02
1.99 2.01
输出样例:
69.12
1.382
4.00
3.9999
*/
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while (in.hasNext()) {
String a=in.nextLine();//直接使用String即可
String b=in.nextLine();
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
System.out.println(b1.add(a1));
System.out.println(b1.multiply(a1));
}
}
}
基本类型封装类
种类及名称
优点
提供比基本类型更多的信息和功能
举例
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println( Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.SIZE);
System.out.println(Integer.TYPE);
int i=8;
System.out.println(i);
System.out.println(Integer.toBinaryString(i));
//转化成2进制
/*
Integer.toHexString(i);//转化成16进制
Integer.toOctalString(i);//转化成8进制
Integer.toString(i);//转化成10进制
*/
}
}
自动装拆箱
自动装箱:基本输入类型-->封装类
自动拆箱:封装类-->基本数据类型
int i=10;
Integer j=i;//自动装箱
int k=j;//自动拆箱
是从jdk5.0开始支持的
特点:部分共享地址
大小位于-128到127
的封装类对象共享地址
Integer i11=100;
Integer i12=100;
System.out.println(i11==i12);
//输出结果:true
Integer i11=1000;
Integer i12=1000;
System.out.println(i11==i12);
//输出结果:false
引用型变量
特点: 变量名字默认代表地址,比较变量不能直接比较变量名字
一维数组
基本操作
初始值
默认:
赋初始值:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
//赋初始值
//方法一
int[] c;
c=new int[] {1,2,3,4,5};
//方法二
int[] d= {1,2,3,4,5};
}
}
基本操作
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n=10;
//声明数组
//方法一 数组元素的数据类型[] 变量名
int[] e;
String[] name;
//方法二 数组元素的数据类型 变量名[]
int c[];
String names[];
//创建数组:java 数组是对象,用new创建
int[] f;//声明
e=new int[12];//分配空间,并赋初始值
int[] a=new int[n];//将上面两步合成一步
System.out.println(a.length);
//取值为0--a。length-1
//for(int i=0;i<10;i++)最好改为
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println(a);
//打印对象a,(c语言指向首地址)
//遍历输出
//方法一 for...
//方法二
System.out.println(Arrays.toString(c));
//方法三foreach
for(int e:c)
{
System.out.print(e+" ");
}
引用型变量特点
对比两个数组是否相同
- 不能直接对比a和b,因为名字代表地址
int[] a=new int[n];
int[] b=new int[n];
System.out.println(a);
System.out.println(b);
System.out.println(a==b);//a和b每个数值都相同,但是a与b 不相同
方法: 使用java自带函数equals
int[] d= new int[15];
int[] a= new int [15];
System.out.println(Arrays.equals(d,a));
与c语言的区别
-
数组名称a:
-
- java表示:对象a,(c语言指向首地址)
-
- 输出a的结果:[I@1cd072a9
[I 代表一维数组
后面1c...是哈希码(16位)
- 输出a的结果:[I@1cd072a9
-
数组a和数组b每个数值都相同,但是a与b 不相同
常用函数
int[] c=new int[]{25,25252,52,4,5};
Arrays.sort(c);
System.out.println(Arrays.toString(c));
//二分查找:需要已经排序
//如果找到:返回目标字符串的坐标
int index1=Arrays.binarySearch(c, 5);
System.out.println(index1);
//如果未找到:返回负数
int index2=Arrays.binarySearch(c, 100);
System.out.println(index2);
二维数组
int[][] m=new int [3][40];
int[][] m1=new int [3][40];
System.out.println(Arrays.toString(m));
//二维数组函数:在一维数组的函数前加入deep
System.out.println(Arrays.deepToString(m));
System.out.println(Arrays.deepEquals(m,m1));
//foreach
for(int[] arr1:m)
{
for(int element: arr1)
{
System.out.println(element+" ");
}
}
//tostring
System.out.println(Arrays.deepToString(m));
int[][] a;
a= new int[3][];
a[1]= new int[5];
System.out.println(Arrays.deepToString(a));
a[0]= new int[] {1,2};
System.out.println(Arrays.deepToString(a));
字符串
1输入字符串 遇到空格或者换行结束
Scanner sc=new Scanner(System.in);
String str=new String();
str=sc.next();
2输入一行字符串 (包括空格)
Scanner sc=new Scanner(System.in);
String str=new String();
str=sc.nextLine();
运算符和表达式-算术、关系、逻辑
(没写就是与c相同)
关系:(判别式)?(结果1):(结果2)
结果会自动转换数据类型为两结果的较高类型
关系:instanceof
(面向对象再学)
作用:
dujde变量指向的对象是不是某类的实例
案例:
Scanner reader = new (Scanner.in);
System.out.println(reader instanceof Scanner);
逻辑:
&& ||与& |的差别在于前面单路运算(如果计算了符号左边,结果已经可以得出,则右边不再运算),后面双路运算
- 【判断题】(错)
在Java中,&&、||和 &、|都表示逻辑的与、或运算,二者使用起来没有什么差异。
二进制
顺序、分支、环和跳转(与c相同)
常用函数
Math函数(数学函数)
JAVA中使用方法:
例如取对数函数x=Math.sqrt(x)
方法介绍:
- tan(double degree)
-
- 用于计算弧度为degree的角度的正切值。
- Math.PI:提供较为准确的‘π’