Java语法

java语法基础

1,输入:从键盘上获取输入。
通过Scanner类型象调用函数

Scanner scan = new Scanner(System.in);
String str = scan.next();
int num = scan.nextInt(); //注意:类型输入错误,抛异常

2,关键字和标识符
关键字:其实就是某种语言赋予了特殊含义的单词。
保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。
标识符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ;
注意:
1)数字不可以开头。
2)不可以使用关键字和保留字。

3,常量和变量
常量:是在程序中的不会变化的数据。final 类型 常量名=值;
变量:类的成员属性(也就是全局变量)和局部变量,局部变量在使用之前要赋初始值,全局变量会赋默认值。
变量的作用域:作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期
变量从定义的位置开始就在内存中活了;
变量到达它所在的作用域的时候就在内存中消失了;
4,数据类型
取值范围

类型存储要求范围
float4byte有效小数位6-7位
double8byte有效小数位15位
int4byte-2147483648~2147483647
short2byte-32768~32767
long8byte范围2的64次方
byte1byte-128~127

在这里插入图片描述
1)基本数据类型:byte、short、int、long、float、double、char、boolean
2)引用数据类型:数组、类、接口。

级别从低到高为byte,char,short(这三个平级)–>int–>float–>long–>double
自动类型转换:从低级别到高级别,系统自动转的;
强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低的变量。

//1、整数类型之间的相互转换
//小范围的赋给大范围的 可以直接赋值
//大范围的赋给小范围的 可能损失精度  需要强转(有可能出现数据的溢出)
int num1=129;
byte b1=2;
b1=(byte)num1;//强转	
//short s1=3;
//s1=b1;
//2、实数类型之间的相互转换
//小范围的赋给大范围的 可以直接赋值
//大范围的赋给小范围的 可能损失精度  需要强转
float f1=12;
double d1=23;
f1=(float)d1;
//3、实数类型与整数类型之间转换
//整数类型赋给实数类型可以直接赋值
//实数类型赋给整数类型  可能损失精度  需要强转  小数部分会被截掉
double d2=12.23;
int num2=20;
num2=(int)d2;
//4、字符型与整数之间
//char类型可以直接赋值给int long
//char与short、byte 相互赋值需要强转 short需要强转成byte,而byte可以直接赋值给short
//整数类型赋值给char类型  需要强转
//ch=100;  //注意 常量可以直接赋给char
//5、字符型与实数之间
//字符型可以直接赋值给实数类型
//实数类型赋值给字符类型  需要强转
char ch2='a';
double d3=98.23;
ch2=(char)d3;
//6、布尔类型与其他类型  不能和其他数据类型进行转换  不兼容

3)基本数据类型注意事项

int lon=23423432545353L;  //1.注意:若数值过大需加L或l表明是long类型
//2.小数字面常量默认是double类型
double d1=1.23D;  //可以加d或D  默认就是double 
d1=2;
float f1=2.32f;//注意:float类型存小数时需要加f或F
f1=12;
//3.字符型char  2个字节  默认\u0000
char c1='好';//一个字符(中文、字母、数字、符号)
c1=97;		//可以赋一个数值(正整数) 而且不能超过char的取值范围
c1='\n';   //转义字符
c1='\u0008';
//4.布尔类型boolean  值:true false  默认值false 字节数没有提供

4)转义字符表

转义序列名称Unicode值
\b退格\u0008
\t制表\u0009
\n换行\u000a
\r回车\u000d
\”双引号\u0022
\’单引号\u0027
\\反斜杠\u005c

5,运算符
1)、算术运算符
+ ,-, * /, % , %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
+:字符串连接符。
++,- -
2)、赋值运算符
=+=-=, *=/=%=
3)、比较运算符
==,<=,>=,!= 特点:该运算符的特点是:运算完的结果,要么是true,要么是false。
4)、逻辑运算符
& , |, ^, ! , &&(短路) ,||(短路)
逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。
&: 只有两边都为true结果是true。否则就是false。
|:只要两边都为false结果是false,否则就是true

^:异或:和或有点不一样。两边结果一样,就为false。两边结果不一样,就为true.
&&&区别: & :无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参数与运算。
|
||
区别:|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
5)、位运算符:用于操作二进制位的运算符。(偏门,没有掌握)
&, |, ^
<< ,>>, >>>(无符号右移)
练习:对两个变量的数据进行互换。不需要第三方变量。

int a  = 3,b = 5;-->b = 3,a = 5;
	a = a + b; a = 8;
	b = a - b; b = 3;
	a = a - b; a = 5;
	a = a ^ b;//
	b = a ^ b;//b = a ^ b ^ b = a
	a = a ^ b;//a = a ^ b ^ a = b;

练习:高效的算出 2*8 = 2<<3;
6)、三目运算符: ()?:

表达式1?表达式2:表达式3;
例如,x=2 y=3
int salary=(x ==y)?2000:200;

6,语句和表达式
1)、表达式

//补充:表达式的自动提升
//1、char byte short会自动转换为int类型进行计算
byte b1=10;
byte b2=23;
//b2=(byte)(b2+b1);//需要强转=
b2+=b1;	//推荐使用这种形式
//2、优先级低的数据类型与优先级高的数据类型进行计算会自动转换为优先级高的数据类型
int n1=12;
double d=12;
//n1=d+n1;//会出错,需要强转
//3、字符串与其他类型进行+运算  会自动转换为连接运算 结果会变成字符串类型
String str=d+"";

2)、if switch, do while, while for

a)、当判断固定个数的值时,可以使用if,也可以使用switch。但是建议使用switch,效率相对较高。 switch(变量){
case 值:要执行的语句;break;

default:要执行的语句; }

工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了就执行
哪个case后面的语句,如果没有相同的则执行default后面的语句。

  b)、switch(表达式){case 值:语句;break;......default:语句} 			//注意:1、表达式:char

byte short int 枚举类型 String(JDK1.7之后) //2、break不能省略

细节:
1):break是可以省略的,如果省略了就一直执行到遇到break为止;
2):default可以写在switch结构中的任意位置;如果将default语句放在了第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。
3)、当判断数据范围,获取判断运算结果boolean类型时,需要使用if。
4)、当某些语句需要执行很多次时,就用循环结构。
while和for可以进行互换。

区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。

break:作用于switch ,和循环语句,用于跳出,或者称为结束。
break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
continue:只作用于循环结构,继续循环用的。
作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。
return:退出方法或结束程序。
7,方 法(函数)
为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的方法。
java中的方法的定义格式:

修饰符 返回值类型 方法名(参数类型 形式参数1,参数类型 形式参数1,…){
	执行语句;
	return 返回值;
}

当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
return的作用:结束函数。结束功能。

如何定义一个函数?
函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
函数的作用
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。
主函数
1)、保证该类的独立运行。
2)、因为它是程序的入口。
3)、因为它在被jvm调用。
函数定义名称是为什么呢?
答:1)、为了对该功能进行标示,方便于调用。
2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。

重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。也叫静态多态

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

8,字符串

String str="asdaasczc";       //字符串定义的第一种形式  直接用字符串常量赋值
String str1=new String("asd"); //第二种形式 用构造方法
int length=str.length();//获取字符串的长度
char c=str.charAt(1);	//拿到指定位置的字符
String s=str.concat("nnnnnn");//将指定字符串连接到此字符串str的结尾,得到新的字符串
int index=str.indexOf("c");// 返回指定子字符串在此字符串中第一次出现处的索引。
String[] strs=str.split("s");//分割字符串
boolean flag=true;
String flag_s=String.valueOf(flag);//将参数转换成String类型
//字符串的比较:==比较地址  equals方法 比较内容
String s1="abc";
String s2=new String("abc");
String s3="abc";
String s4=new String("abc");
System.out.println(s1==s2);//false
System.out.println(s1==s3);//true
System.out.println(s2==s4);//false
System.out.println(s1.equals(s2));//true
//String的长度不能改变  StringBuffer长度能改变

9,数 组:用于存储同一类型数据的一个容器。
好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。

Student[] stus=new Student[10];//动态初始化
	//注意:如果用动态初始化准备对象数组,一定要记得赋值,否则默认是null
	//若用null调用属性或方法,就会出现NullPointException空指针异常
	int[] arr={1,2};//静态初始化
	double[][] d={{1,2}{2}{3,45,6}};//静态初始化
	//数组的复制
	int[] arr={22,1,34,4,5};
	int[] obj=new int[5];
	System.arraycopy(arr,0,obj,0,arr.length);//参数:源数组,源数组起始位置,目标数组,目标数组起始位置,复制的长度
	Arrays.sort(obj); // Arrays:此类包含用来操作数组(比如排序和搜索)的各种方法。排序

如何在java中表现一个数组呢?两种表现形式。
1)、元素类型[] 变量名 = new 元素类型[元素的个数];
2)、元素类型[] 变量名 = {元素1,元素2…};
元素类型[] 变量名 = new 元素类型[]{元素1,元素2…};

10,java分了5片内存。
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3:垃圾回收机制。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页