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;

基本数据类型

特点:

不同平台,储存相同

精度从低到高排序

image

  • 字符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));
        }
    }
}

基本类型封装类

种类及名称

image

优点

提供比基本类型更多的信息和功能
举例

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

引用型变量

特点: 变量名字默认代表地址,比较变量不能直接比较变量名字

一维数组

基本操作

初始值
默认:
image
赋初始值:

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和数组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:提供较为准确的‘π’
posted @ 2021-09-02 17:12  kingwzun  阅读(126)  评论(0编辑  收藏  举报