java一些基础知识介绍

目录

1.注释

2.语法解释

3.关键字(格式全小写)

4.标识符(名字)

5.常量

6.数据类型

基本数据类型:四类八种数据类型

引用类型:所有的引用类型都可以赋值为一个null值,但是代表什么都没有

7.变量

8.数据类型转换

自动类型转换

强制数据转换

编译器的优化

9.数字和字符的对照关系(编码表ASCII和Unicode)

10.运算符

(1)算术运算符:+、-、*、/、++、--、%

(2)赋值运算符(=,+=,-=,*=,/=,%=)

(3)比较运算符(==,>, <, >=, <=, !=)

(4)逻辑运算符(&&, ||, !)

(5)三元运算符(讲述一元,二元,三元运算符)

(6)位运算符

11.运算符优先级

12.方法

13.方法重载


1.注释

// 行注释

/*   */ 多行注释

/**  */可以用来自动生成文档

2.语法解释

public class helloword{
    public static void main(String[] args){
	    System.out.println("hello world");
	}
}

第一行:public class 后面代表定义一个类的名称,类是java源代码中的基本组织单位

第二行:固定写法,代表main方法,表示程序执行的起点

第三行:System.out.println表示打印输出语句

3.关键字(格式全小写)

特点:(1)完全小写的字母;(2)在增强版的记事本中(例如notepad++)有特殊颜色

4.标识符(名字)

定义:程序中,定义的类的名字、方法的名字等等都是标识符

命名规则:可以包含英文大小写字母、0-9数字、$、_下划线。但是不能以数字开头,同时标识符也不能是关键字,不能和关键字重复。

命名规范:(1)类名规范使用大驼峰式:首字母大写后面每个单词首字母都是大写;(2)变量名规范使用小驼峰:首字母小写后面每个单词首字母都大写;(3)方法名规范也是用小驼峰。

5.常量

定义:在程序运行期间,固定不变的量。

分类(1)字符串常量:凡是用双引号的部分称为字符串常量。(2)整数常量,直接写上的数字没有小数点。(3)浮点数常量:直接写上的数字,有小数点。(4)字符常量:凡是用单引号引起的单个字符(有且只有一个字符,不能是串,也不能为空字符),就叫做字符常量。(5)布尔常量:只有两种取值true和false。(6)空常量:null,代表没有任何数据。

6.数据类型

大致分为基本数据类型和引用数据类型。

基本数据类型:四类八种数据类型

 

整数型:byte(1个字节)  short(2个字节)  int(默认,4个字节)  long(8个字节)

浮点型:float(4个字节)  double(默认,8个字节)

字符型:char(2个字节)

布尔型:boolean(1个字节)

引用类型:所有的引用类型都可以赋值为一个null值,但是代表什么都没有

字符串:String

数组:int[]  char[]    long[]   byte[]  float[]等

类:public class ClassName

接口:接口

Lambda:函数式编程

注意:(1)字符串不是基本数据类型,而是引用类型。(2)浮点数可能只是一个近似值,不是一个精确数。(3)数据范围与字节数不一定相关,例如float数据范围比long更加广泛,而long是8字节。 (4)浮点数默认类型是double,如果一定要使用float类型,需要加入后缀F;如果是整数,默认是int类型,如果一定要使用long类型,需要加上一个后缀L;都推荐使用大写字母后缀。

7.变量

定义:程序运行期间,内容可以发生改变的量。

创建一个变量并且使用的格式:数据类型  变量名称 = 数据值   // 在创建一个变量的同时,初始化值。

注意:

(1)变量名不可重复

(2)对于float和long类型来说,字母后缀F和L不能丢掉。

(3)如果使用byte和short数据类型的变量,那么右侧的数值范围不能超过左侧类型的范围。

(4)没有进行赋值的变量不能直接使用,一定要赋值之后才能使用。

(5)变量不能超出作用域范围。作用域:从定义变量的一行开始,一直到所属的大括号结束为止。

(6)可以通过一条语句创建多个变量,但是一般情况不推荐这么写。

8.数据类型转换

当数据类型不一样时,会发生数据类型转换,有自动类型转换(隐式)和强制类型转变换(显式)。

自动类型转换

(1)特点:代码不需要处理,自动完成。(2)规则:数据范围从小到大 

        示例:float n = 421L; // 左边是float类型,右边是long类型,不一致;long--->float,符合数据范围从小到大的要求,这一行发生了数据自动转换,成功。

强制数据转换

(1)特点:代码需要特殊的格式处理,不能自动完成。(2)格式:范围小的类型  范围小的变量名 = (范围小的变量名)原本范围大的数据  

         实例:int num = 100L;  // 左边是int类型,右边是long类型,不一致; long--->int,不是从小到大,不能发生自动类型转换,会报错。

                   int num = (int) 100L;  // 不会报错,强制转换成功。

注意:

(1)强制类转换一般不推荐使用,因为有可能发生精度损失、数据溢出。

(2)byte、short、char这三种数据类型可发生数学运算,例如加法。

(3)byte、short、char这三种数据类型在运算的时候,都会被首先提升成int类型,然后再计算,也就是说运算结果都变为int类型,byte + byte- ->int,short + short- ->int,byte + short- ->int,char + char --> int 等。

编译器的优化

(1)对于byte/short/char三种数据类型,如果右侧赋值的数值没有超过范围,那么javac编译器会自动隐含的补上(byte)(short)(char);如果右侧数值超过范围那么编译器报错。

(2)再给变量赋值的时候,如果右侧的表达式全都是常量,没有任何变量,那么编译器Javac将会直接将若干个常量表达式计算得到结果。例如short result = 5+8;等号右边全是常量,没有任何变量参与运算,在编译之后得到的.class字节码文件当中相当于【直接就是】:short result=13;右侧的常量运算结果数据,没有超过左侧范围,所以正确。这称为“编译器的常量优化”,但是注意:一旦表达式中有变量参与,就不能进行这种优化了。

public class Demo2Operator{
	public static void main(String[] args){
		byte a=8;
		byte b=5;  // 即使右边的数字5默认是int类型,但是没有超过byte数据范围,所以编译器会进行优化,隐式的添加强制转换。
		byte c=128; // 报错,因为数值超过了byte的数据范围,编译器报错。
		byte result1=8+5;  // 得到的是13,因为时常量数值的直接相加
		byte result2=a+b;  // 报错,因为byte类型运算会直接提升为int类型,这里没有强制转换。
	}
}

9.数字和字符的对照关系(编码表ASCII和Unicode)

ASCII码表:American Standard Code for Information Interchange 美国信息交换标准代码

Unicode码表:万国码,也是数字和符号的对应关系,开头0~127部分和ASCII码一样,但是从128开始包含更多字符。

几个特殊的码:48-‘0’,65-‘A',97-‘a’

10.运算符

运算符:进行待定操作代的符号,例如+

表达式:用运算符连起来的式子叫做表达式,例如20+5

(1)算术运算符:+、-、*、/、++、--、%

除法/:对于整数表达数来说,整数除以整数,结果仍是整数,只看商,不看余数。

取模%:只有对于整数除法来说,取模运算才有意义。

注意:一旦运算中有不同类型的数,那么结果将会是数据类型范围大的那种,eg:int+double---->double+double--->double,但是不要忘记byte/short/char在运算的时候都会自动提升为int。

加号“+”常见的三种用法:(1)对于数值来说,就是加法。(2)对于字符类型char来说,在计算之前,char会被提升为int,然后再计算。char类型字符和int类型数字之间的关系表:ASCII和Unicode。(3)对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串的连接操作。任何数据类型和字符串进行连接时,结果都会变成字符串。eg: String tt="hello";  System.out.println(tt+20);  // hello20  System.out.println(tt+20+30);  // hello2030     System.out.println(tt+(20+30)); // hello50

自增/自减运算符:写在变量名称之前或者之后,eg:++num或者num++

使用方式:(1)单独使用,不和其他任何操作混合,自己独立成为一个步骤。(2)混合使用,和其它操作混合,例如与赋值混合或者打印操作混合等。

使用区别:

(1)在单独使用时,前++和后++没有任何区别。

(2)混合使用时,<1>如果是前++,那么这个变量立刻加1,然后拿着结果进行使用。【先加后用】<2>如果是后++,那么首先使用这个变量本来的数值,然后再让变量加1。【先用后加】

注意:

1.只有变量才能使用自增自减运算符,常量不可发生改变,所以不可用。

2.int和double变量都可以使用自增自减运算。

public class DemoOperator{
    public static void main(String[] args){  
		//与打印操作混合使用
        // 混合使用,前++,先加后用
		int m=10;
        System.out.println(++m);  //11
        System.out.println(m);  //11
        System.out.println("----------------------------");
		// 混合使用,后++,先用后加
        int n=30;
        System.out.println(n++); // 30
        System.out.println(n); // 31
		System.out.println("----------------------------");
		//与赋值操作混合使用
		// 前--,先减后用
		int num1 = 40;
		int result1 = --num1;
		System.out.println(result1);  // 39 
		System.out.println(num1);  // 39
		System.out.println("----------------------------");
		// 后--。先用后减
		int num2=50;
		int result2=num2--;
		System.out.println(result2);  // 50 
		System.out.println(num2);  // 49
		int x=10;
		int y=20;
		int result3=++x + y--;
		System.out.println(result3);  // 31
		System.out.println(x);  // 11
		System.out.println(y);  // 19
	}
}

(2)赋值运算符(=,+=,-=,*=,/=,%=)

基本运算符和复合运算符

基本运算符:就是一个等号“=”,代表将右侧数据赋值给左侧变量

复合运算符:+=,-=,*=,/=,%=

注意:(1)只有变量才能使用赋值运算符,常量不能使用。(2)复合运算符其中隐含了一个强制类型转换。

public class Demo1Operator{
	public static void main(String[] args){
		byte num = 8;
		/*
		num = num +1
		num = byte + int
		num = int + int
		num = int
		num = (byte)int
		*/
		num +=1;
		System.out.println(num); // 9
	}
}

(3)比较运算符(==,>, <, >=, <=, !=)

注意:

(1)比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true或者false。

(2)如果进行多次判断,不能连这写。数学中有这种写法如1<x<3,但是程序中不允许这种写法,编译报错,所以要拆开,使用逻辑运算符连接拆开的判断式子。

(4)逻辑运算符(&&, ||, !)

注意:

(1)&&和||具有短路效果:如果根据左边已经可以判断得到最终结果,那么右边的代码将【不再执行】,从而节省一定的性能。

(2)逻辑运算符只能用于Boolean值。

(3)与、或需要左右各一个Boolean值,但是取反只要有唯一的Boolean值即可。

(4)与,或这两种运算符,如果有多个条件,可以连续写。对于1<x<3的情况应该拆开两个部分,然后使用与运算符连接起来,int x=2; 1<x&&x<3;

(5)三元运算符(讲述一元,二元,三元运算符)

一元运算符:只需要一个数据就能操作的运算符,例如:取反,自增,自减。

二元运算符:需要2个数据就能操作的运算符,例如:加法,赋值。

三元运算符:需要3个数据就能操作的运算符,二者选其一。

格式:数据类型 变量名称 = 条件判断 ? 表达式A:表达式B;

流程:首先判断条件是否成立,如果成立为true,那么将表达式A的值赋值给左侧的变量;如果不成立为false,那么将表达式B的值赋值给左侧的变量。

注意(1)必须同时保证表达式A和表达式B都符合左侧数据类型的要求。(2)三元运算符的结果必须使用。

(6)位运算符

按位模式:&(按位与), |(按位或), ^(按位异或xor), ~(按位非)

按位移动:>>,<<, >>>

11.运算符优先级

12.方法

定义一个方法的格式:public static void 方法名称() { 方法体;}  (实际上这是一个静态方法)

注意:

(1)方法定义的先后顺序无所谓。

(2)方法应该定义在类当中,但是不能在方法中再定义方法,不能产生嵌套包含关系。

(3)方法定义好了之后不会执行,如果要执行一定要进行方法的调用:以下三种调用的一种。

(4)如果方法有返回值,那么必须写上return 返回值,不能没有;同时,return后面返回的数据,必须和方法的返回值类型对应起来。

(5)对于一个void没有返回值的方法,可以写return也可以省略return,但是不能写return后面的返回值,只能写return。

定义方法的完整格式:

修饰符 返回值类型 方法名称(参数类型 参数名称,......){

    方法体;

    return 返回值;

}

 修饰符:现阶段的固定写法 public static。

返回值类型:方法最终产生的数据结果是什么类型。

方法名称:方法的名字和变量的规范一样,使用小驼峰。

参数类型:进入方法的数据是什么类型。

参数名称:进入方法的数据对应的变量名称。 参数如果有多个使用逗号分隔。

方法体:方法要做的事情,若干行。

return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处。

返回值:方法执行后最终产生的数据结果。必须要和方法名称前面的返回值类型保持对应。

定义方法的三要素:返回值类型,方法名称,参数列表。

方法的三种调用格式:

1.单独调用:方法名称(参数);注意返回值类型为void,这种方法只能够单独调用,不能进行打印调用和赋值调用。

2.打印调用:System.out.println(方法名称)(参数))

3.赋值调用 :数据类型 变量名称=方法名称(参数)

 注意:

(1)对于有返回值的方法,上述三种调用都可以;但是对于无返回值的方法,只能使用单独调用。

(2)一个方法可以有0,1,多个参数;但是只能有0或者1个返回值,不能有多个返回值。如果希望一个方法中产生多个数据需要被返回,解决方案是使用一个数组作为返回值类型即可。

(3)任何数据类型都可以作为方法的参数类型或者返回值类型。

13.方法重载

对于功能类似的方法来说,因为参数列表不一样,却需要定义不同的方法名称,太麻烦。

定义:多个方法的名称一样,但是参数列表不一样。

优点:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

方法重载和下列因素有关:(1)参数个数不同。(2)参数类型不同。(3)参数的多类型顺序不同。

方法重载和下列因素无关:(1)与参数名称无关。(2)与参数的返回值类型无关。

例子:

别人总结整理的知识博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值