JavaSE的基本语法

JavaSE基本语法

一、语法的注意事项

1、严格区分大小写
2、每句命令结尾使用分号
3、符号都是英文状态
4、括号、引号都是成对出现的!
5、注意缩进

Tips:

  • 文件名和类名可以不一致,但public修饰的类必须和文件名一致!
  • 同一个java文件下,有几个class就有几个“.class”文件
  • 同一个java文件下,只能有一个public class 类,并且该类的类名必须与java文件的文件名一致。
  • 当java下有很多类时,可以使用 java + 编译好的类进行使用。

二、变量

定义:

内存中的一块数据存储空间的表示

  1. 变量的分类:按照类型分类
    基本数据类型和引用数据类型

  2. 按照声明的位置分类

    成员变量:类内、方法体外声明的变量
    局部变量:方法体内声明的变量

    二者在初始化值方面的异同:
    同:都有生命周期。
    异:局部变量除形参外,需显示初始化。

变量三要素

数据类型

字节和位的转换

整型特点:
1、编译器默认的整型类型是int。
2、如果希望将整型的常量值表示成long类型,则需要在数值后面加l或L。
3、每种数据类型存储的常量值必须在能表述的范围内,否则报错。

浮点型特点:
1、编译器默认的浮点型是double,如果希望当做float,则需要在数值后面加f或符F。
2、浮点数在计算机底层的存储,会丢失精度,所得出的数是一个无限接近于真值的数。如果希望提高精确度,可以用BigDecimal类

字符型特点:

标识符

1、标识符的命名规则

由26个英文字母大小写,0--9,_或$符号
数字不可以开头
不可以使用关键字或保留字,允许包含
严格区分大小写,长度有限制

2、标识符的命名规范

包名:xxxyyyzzz
类名、接口名:XxxYyyZzz
方法名:xxxYyyZzz
常量名:XXX_YYY_ZZZ

存储的数据

变量的数据转换

自动类型转换:容量小的类型自动转换为容量大的数据类型。
byte、short、char之间不会进行数据转换,他们三者首先进行int类型转换。
boolean类型不与其他数据类型进行转换。
当任何其他基本数据类型与字符串类型进行(+)运算时,基本数据类型自动转换为字符串类型。

需要注意的是:
自动类型转换无语法,可自动转换。
强制类型转换(大转小):
数据类型 变量名 = (目标类型)数值;
注意:强转只对最近的数值起作用

byte a = (byte)3.5 * 10 + 2.5 * 20; // 错误
byte a = (byte)(3.5 * 10 + 2.5 * 20); // 正确

默认的数据类型
1、整型数值默认为:int
2、byte、short、char 之间进行运算,结果值的类型为int
3、注意拼接运算,“看到底是先运算还是先拼接“

system.out.println("hello"+'a'+12); // helloa12
system.out.println('a'+12+"hello"); // 109hello

三、运算符

自增自减运算符

如果作为独立语句使用,则i++;等价于++i;等价于i=i+1;

如果作为表达式使用,则:int j= i++; 先赋值后自增;iint j= ++i; 先自增后赋值

short s = 3; 
s = s+2;// 强转语句错误
s += 2; // 等价于 s = (int)(s+2);复合赋值运算符底层做了优化,进行了内部强转,效率较高!

自增运算练习

//自增运算问题
 
 
class Test{
	public static void main(String[] args){
		int j = 1;
		/*
		j += ++j * j++;相当于
		j = j + (++j * j++);
		(1)先算右边
		①先取j=1的值
		②++j
		A:j自增 j=2
		B:取j=2的值
		③j++
		A:先取j=2的值
		B:自增j=3
		④乘法
		2*2 = 4
		⑤加法
		1 + 4
		⑥赋值
		j = 5
		*/
		j += ++j * j++;
		System.out.println(j);
	}
}

逻辑运算符

&&:如果第一个条件不成立,则不再判断第二个条件,直接结果为false。
判断条件的顺序影响着程序的运行结果。

if (newI >= 0 && newI < lengthX 
                && newJ >= 0 && newJ < lengthY 
                && board[newI][newJ] == words[index] 
                && !tof[newI][newJ])
if (board[newI][newJ] == words[index]
                &&newI >= 0 && newI < lengthX 
                && newJ >= 0 && newJ < lengthY 
                && !tof[newI][newJ])

三元运算符

格式:条件表达式?表达式1:表达式2;
运算规则:判断条件表达式的结果是否成立,如果成立,则执行表达式1,否则执行表达式2

位运算符

常见的位运算符:

a<<b 左移:将a左移指定的b位,空缺位补0

a>>b 右移:将a右移指定的b位,空缺位补符号位

a>>>b无符号右移:将a右移指定的b位,空缺位补0

a&b与:两位都为1,结果为1,反之为0

a|b或:两位都为0,结果为0,反之为1

位运算练习

面试题15:二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

public int hammingWeight(int n) {
        int count = 0;
        while (n !=0){
            count = count +1;
            n = n & (n-1);
        }
        return count;
    }

四、进制

(1)概述

所有数字在计算机底层都以 形式存在。
对于整数,有四种表示方式:

(2)二进制

java整数常量默认为int类型,占32位,第32位为符号位
如果为long类型,占64位,第64位为符号位

二进制整数有如下三种形式:
1.原码:将整数直接转化为二进制形式。最高位为符号位。
2.负数的反码:对原码按位取反,符号位为1。
3.负数的补码:反码加1。
4.需要注意的是:正数的原码、反码、补码皆一致。

计算机以二进制补码的形式保存所有的整数。

(3)为什么要使用原码、反码、补码表示形式呢?

计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.

特殊值:-128

-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就应该是-128。
但是此时-128,如果用补码到反码,再到原码去计算是不对的。

原文地址:https://www.cnblogs.com/njuptzheng/p/12935921.html