Java基础语法(1)

馋奶兔 提交于 2020-01-18 01:15:56

一:关键字

Java已经赋予了特殊含义的单词,特点是都是小写字母.(Java 关键字是区分大小写的)

 

目前见到的关键字:

public :公共的,公开的.权限修饰符,说明后面的类或者是方法谁都可以用.

class :定义类的.

static :静态的,说明这个方法可以属于类,可以使用类名直接调用.

void :.说明当前的方法没有返回值.

main : 不是关键字.约定俗成的程序的入口点.

 

 

二 :源文件可以写多少个类定义的演示

编译的时候一个类编译成一个.class文件,多个类生成多个.class文件

/*

演示:文件名和类名不一定保持一致

类前边如果加public,那么类名和文件名必须保持一致.

否则,文件名和类名可以不一致.

此时,编译成功的结果,字节码文件的名称和类名一致.

*/

// public class Demo4{

//没有public修饰,表明权限是default(默认权限:包权限)

//没有定义包的话,表明都在默认包中.

class Demo4{

  public static void main(String[] aa){

    System.out.println("hello");
  }
}

 

//想要被jvm虚拟机直接运行的类必须包含main方法,否则不用定义.

class Demo5{
  public static void main(String[] aa){
    System.out.println("hello");
  }
}

 

 

总结:

一般情况下:一个源文件中只定义一个类,而且这个类是public修饰的,类名和文件名保持一致.

一个源文件中可以包含多个类定义,但是public修饰的只能有一个.此源文件被编译后,类分别生成自己的.class字节码文件.

 

三:标识符

1:作用

  用于给方法、变量、接口等命名的字符序列

  

 

2:组成规则

  大小写英文字母、下划线、数字、$组成

  不能以数字开头

  不可以使用关键字,但可以包含关键字

  java严格区分大小写

 

3:命名规范

类名、接口名:

  多单词组成时,所有单词首字母大写

包名:

  多单词组成时,所有字母小写

变量名、方法名:

  多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写

final变量名:

  所有字母都大写,多单词时单词之间用下划线分割

  如:AAA_BBB_CCC

四:常量与变量

1:常量  

Java中常量分两种:

  字面量:在程序中直接出现的值

  final变量:也称为final常量,这种变量一旦赋值,就不能改变.(常量名一般使用大写字符)  语法:final 常量名 = 值;

  

 

字面量:程序中直接出现的数值:

六种:

1.整数常量:直接出现的数字,不带小数点

2.小数常量:直接出现的小数.必须带小数点

3.字符常量:用单引号('')引起的 数字, 字母 ,字符.   注意:'' 不是空字符

4.字符串常量:用双引号引起的单个字符或者是多个字符."" 也是字符串,空串.

5.布尔常量:true false   TRUE FALSE 严格区分大小写.

6.null常量:所有的引用数据类型的一个空值.   备注:Null不能直接打印

其中:整型常量有四种表示方式:

十进制:每位上的数只能是1-9,101,默认的数值表示方式.

二进制:每位上的数只能是0,1,21,0b或者0B开头.      

八进制:每位上的数只能是0-7,81,0开头.

十六进制:每位上的数只能是0-9,A-F,161,0x 或者是0X开头.

备注:进制的本质是权重, 如十进制数531,5的权重是100,3的权重是10,1的权重是1,

 

五:原码,补码,反码

1:正数表示形式

针对正数,三者相同.
10 -> 0000 1010   原码,反码,补码一致.

2:负数表示形式(在计算机上的表现形式)

负数用补码表示:
    补码是反码+1得到:
    反码是原码数值位取反得到.

原码转换为反码:符号位不变,数值位分别“按位取反” 

 


原码转换为补码:符号位不变,数值位按位取反,末位再加1

 

补码转换为原码:符号位不变,数值位按位取反,末位再加1。

即补码的补码等于原码

 

六:变量

1:变量的三要素:

变量类型,变量名,变量值

2:定义变量的两种格式:

(1)定义和赋值一起进行:

  变量类型 变量名 = 初始值;

 

(2)先定义,后赋值.

  变量类型 变量名;

  变量名 = 初始值;

 

3:变量的含义

  变量就是一块内存空间,里面的值可以随时发生变化 

  

4:变量的数据类型

  

在 Java 的领域里,基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址。

整型:     			    字节数
		byte			1
		short			2
		int			4
		long			8
浮点型:
		float			4
		double(默认)		8
字符型:
		char			2
布尔型:
		boolean			1

 


public class VariableDemo2{
    public static void main(String[] args){
        //定义变量
        //整型数值,如果是在前面的类型的表数范围内,可以直接赋值.!!!
        //系统会自动的将字面量int型转换成和前面类型匹配的类型.
        /*
        byte b = 127;
        
        short s = 128;
        
        int i = 21245487;
        */
        
                
        //快速的获取到int型的最大值
        System.out.println(Integer.MAX_VALUE);//2147483647
        System.out.println(Long.MAX_VALUE);//9223372036854775807
        long l = 2147483648L;
        long l2 = 10; //默认的类型转换 : 从小范围到大范围.
        //字面量的int值不能超过int的表数范围,如果超过int型最大值,加L/l后缀,表明是一个long
        
        /*
        //程序中出现的浮点型字面量默认是double类型
        //在数值后加后缀,f/F ,明确说明数值是float类型
        float f = 3.14f;
                
        double d = 3.14;
        
        char ch = 'a';
        
        boolean bool = true;
        */
        
        //变量如何使用???
        // System.out.println(b);//b
        // System.out.println(s);//
        // System.out.println(i);//

    }
}

 

 区别:

基本数据类型:  数据直接保存在变量名所在的内存空间.

引用数据类型:
  数据不是直接保存在变量名所在的内存空间,而是在另外的内存空间中.
  变量名所在的内存空间保存的是一个地址值.
比如:
Scanner s = new Scanner(System.in);
变量s中保存的就是等号右边的对象所在的内存地址的地址值!!!

  

5:变量的作用域scope  

6:类型转换

	类型转换:
		隐式类型转换:(自动类型转换),不需要特殊的格式.
			从表数范围小的到表数范围大的.
		显式类型转换:(强制类型转换)
			从表数范围大的到表数范围小的
		特殊的格式:
			变量名 = (目标类型)被转换的值;
			int a = (int)3.14;
			
			
			
	强制类型转换:
		针对小数:取整
		针对整数:高位截断!!!
		
			double a = 128.5;
			byte b = (byte)a;
			b -> -128
			先取整,在高位截断!!!

自动:由图可知byte不会自动转换为char,同时在只有byte.char.short(也可以有int型数据参与运算)类型数据参与运算时,都会自动转换成int型进行计算,char是用unicode(int类型)参加运算,而不参加运算时则不会自动转换.

强制:

 

public class TypeConvertDemo{
    public static void main(String[] args){
        /*
        //自动类型转换
        int a = 10;
        long l = a;//int -> long
        System.out.println(l);
        //强制类型转换
        double d = 3.14;
        int b = (int)d;//截断 : 只保留整数部分
        System.out.println(b);//3
        */
        
        // byte b;
        // b = (byte)128; // 4 个字节.
        
        /*
            0000 0000 0000 0000 0000 0000 1000 0000 int型的128
            截断:
            从高位截断!
            1000 0000 -> 被保留的结果:负数-128
        */
        
        // System.out.println(b);
        
        //
        // double d = 128.5;
        // byte b = (byte)d;
        // System.out.println(b);
        
        //发生了两次类型转换
        // double -> byte
        // byte -> int
        int x = (byte)3.14;
        System.out.println(x);
    }
}
/*
    不同类型的变量进行运算,都会自动的往范围大的类型进行转型.
    
*/
public class TypeConvertDemo2{
    public static void main(String[] args){
        /*
        //int -> double
        double d = 3 + 1.5;
        
        //int -> long
        long l = 3 + 100L;
          
        
        short s1 = 10;
        short s2 = 20;
        // short s3 = s1 + s2;//short类型变量只要进行运算,首先无条件转换成int型.
        long l = s1 + 100L;//short->int->long
                
        //char参与运算实际上使用的是对应的unicode编码值.
        char ch = 'a';
        System.out.println(ch + 1);
    
        char ch1 = (char)97;// int -> char
        System.out.println(ch1);
        */        
        //
        byte b = 10;
        short s = b;//ok
        
        // char ch = b; //从byte转换到char可能会有损失        
        
    }
}

 

七:运算符

1:算术运算符

 

 

+ - * :和数学中规则一样
/ :当操作数都是整型,结果也是整型,小数部分舍弃
% :结果是除法操作的余数.结果的符号取决于被模数.
++ -- :针对变量进行操作.
	前++ : 先对变量增加,再使用.
	后++ : 先使用变量原来的值,再增加.
	--同理:
+ : 当 + 两侧任意一侧是字符串的时候,+就是连接符.

2:赋值运算符  

 

基本赋值运算符:
	=
扩展赋值运算符:
	+= -= *= /= %=
特点:不改变等号左边的变量的类型,相当于系统自动加上了类型转换.
	short s = 1;
	s = (short)(s + 1);// int -> short
	s += 1; //自动类型转换

  

3:比较运算符

 

结果肯定是一个boolean类型

 

4:逻辑运算符

 

 

 

 

/*
    演示逻辑操作符
    &    :两个操作数都为true,结果才为true,否则就是false
    |    :两个操作数有一个为true,结果就为true.两个操作数都为false,结果是false.
    &&  :短路与:当左侧操作数为false时,整体的结果已经是false,右侧就不参与运算了.
    ||     :短路或:当左侧操作数为true时,整体的结果已经是true,右侧就不参与运算了.
    ^    :异或:两个操作数不同,结果才为true.双true,双false 结果都是false.
    !    :取反,单操作数,true -> false ,false->true.
    
*/
public class LogicDemo{
    public static void main(String[] args){
        /*
        //布尔常量进行逻辑运算
        System.out.println(true && true);
        
        //布尔类型的变量进行运算
        boolean b1 = true;
        boolean b2 = false;
        boolean b3 = true;
        System.out.println(b1 & b2);
        System.out.println(b1 | b2);
        System.out.println(b1 && b2);
        System.out.println(b1 || b2);
        System.out.println(b1 ^ b3);
        System.out.println(b1 ^ b2);
        System.out.println(!b1);
        */
        
        //短路操作
        
        // int a = 1;
        // boolean b = true && (a++) > 1;
        // System.out.println(a);//2
        // System.out.println(b);//false

        // && 左侧为false,右侧不参与运算.
        int a = 1;
        boolean b = false && (a++) > 1;
        System.out.println(a);//1
        System.out.println(b);//false        
    }
}

 

 

5:位运算符 

 

 

 

 

 

 

 

 

 

 

6:三元运算符

 

格式:
    (条件表达式) ? 表达式1:表达式2;

    若条件表达式值为true,整体是表达式1的值.否则是表达式2的值.
System.out.println(2>1?2:1.0);   2.0
三元运算符中表达式1和表达式2的类型不同时,整体结果将自动转型到表数范围大的类型.

 

7:运算符的优先级

级别为 1 的优先级最高,级别 11 的优先级最低

 

  

  

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!