java学习笔记02


Java学习笔记02

封面pid:78790789

变量

Java是一种强类型语言,每个变量都必须声明其类型,可以是基本类型或引用类型。变量名必须是合法的标识符。变量是可以变化的量,变量实际上代表了内存中一块空间,空间中存放的值是可变的。

为了增强可读性,不建议在一行中定义多个变量。

变量的要素包括变量名,变量类型和作用域。关于变量的作用域,需要介绍三种变量:

  • 类变量:在类里面的变量,需要加关键字static
  • 实例变量:类似类变量,但没有static。在类的里面,方法外面。
  • 局部变量:写在方法里面的变量
public class Demo{
    String name;
    int age;
    //实例变量,在方法外面,又在类的里面。从属于对象
    public static void main(String[] args) {
        //main方法
        int i = 10;//i是局部变量,只存在于本代码块
        System.out.println(i);
        Demo demo = new Demo();
        //类名 变量名 = 操作符 构造器名
        System.out.println(demo.age);
        /*
         没有初始化age却能正常输出,输出结果是0
         实例变量如果不初始化则会变成该类型的默认值
         */
    }
    public void add() {
        //其他方法
    }
}

值得一提的是,布尔型变量的默认值是false。除了八种基本类型,其余变量默认值都是null。实例变量的输出很特别(System.out.println(demo.age);),但加了static变成类变量了就可以直接输出。

与变量相对应的是常量,常量被初始化之后就不能被改变。常量名一般用大写字符,创建一个常量:final double PI = 3.14;。Java中虽然有const这个关键字,但并没有使用,定义常量需要用final关键字。

Java中的修饰符不注重顺序,如果要让这个常量变成类变量,即可以写static final double PI = 3.14;也可以将static和final交换位置。

变量的命名规范:

  • 类变量、局部变量:首字母小写+驼峰原则,monthSalary
  • 常量:大写字母+下划线,例如MAX_VALUE
  • 类名:首字母大写+驼峰原则,Man,GoodMan
  • 方法名:首字母小写+驼峰原则,run(),runRun()

运算符

Java运算符分为以下几种:

  • 算术运算符:+,-,*,/,%,++,–

  • 赋值运算符:=

  • 扩展后的赋值运算符:+=,-=,*=,/=

  • 位运算符:&,|,~,^,<<,>>,>>>

  • 关系运算符:>,>=,<,<=,=,!=,instanceof

  • 逻辑运算符:&&,||,!

  • 条件运算符:? :

运算符优先级有一个记忆口诀:单算移关与,异或逻条赋

单:单目运算符,比如逻辑非(!),按位取反(~),自增,自减
算:算数运算符,加减乘除取模
移:移位运算符,左移(<<),右移(>>),无符号右移
关:关系运算符,大于(>),小于(<),大于等于(>=),小于等于(<=),还有instanceof
与:按位与(&)
异:按位异或(^)
或:按位或(|)
逻:逻辑运算符(and or )
条:条件运算符 ?:
赋:赋值语句

++和–都是一元运算符,只需要一个变量就可运算。一元运算符有两种形式,符号在前面的叫前缀形式,比如++i。符号在后面的叫后缀形式,比如i++。

在表达式中,前缀形式会先完成+1,而后缀形式会先使用变量原来的值。记忆方法:加号在前就先加后使用,加号在后面就先使用后加。

public class Demo {
    public static void main(String[] args) {
        int i = 1;
        int j = 1;
        System.out.println(i++);
        System.out.println(++j);
        System.out.println(i+" "+j);
    }
}

输出:

1
2
2 2

逻辑运算符中,与运算&&只有两个都是true才为true。而或运算||只需要有一个是true就为true。与运算和或运算按照短路方式求值,如果第一个操作数能够确定表达式的值,就不会运算第二个操作数。如expression1 && expression2,如果第一个表达式的值为false,那么结果不可能为true,就不会运算第二个表达式。类似的,如果expression1 || expression2中第一个表达式为true,那么结果肯定为true,第个表达式不会被进行运算。可以利用这一点避免错误:

x != 0 && 1/x > x+y //这样不会出现数字除以0的问题

位运算

&运算符都是1才取1,否则是0;|都是0才为0,否则是1;^相同取0,不同取1。下面是一个例子,不是Java代码。

位的与运算和或运算是没有短路原则的,左右两边的表达式都会被执行。

A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~B = 1111 0010

一个面试题:如何计算2*8最快?答案是位运算

Java的位运算还有左移( << )、右移( >> ) 、无符号右移( >>> ) 。

public class Demo {
    public static void main(String[] args) {
        short i = 5;// i = 0000 0000 0000 0101
        System.out.println(i<<2);
        System.out.println(i>>2);
    }
}

输出为:

20
1

i是一个short类型变量,short类型的大小是2B,即16位,因此i用二进制表示实际上是0000 0000 0000 0101,将i左移之后得到的是0000 0000 0001 0100,十进制数值为20。右移得到0000 0000 0000 0001,十进制为1。

右移和无符号右移存在区别,>>>会使用0填充高位,>>则会使用符号填充高位。

+除了数学上的加法之外还可以作为字符串拼接符。

public class Demo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(""+a+b);
        System.out.println(a+""+b);
        System.out.println(a+b+"");
    }
}

结果为:

1020
1020
30

当括号内左边和中间有字符串时a和b都被作为字符串拼接起来了,但把空串放到右边的时候返回的结果却是a+b。

包机制

为了更好地组织类,Java提供了包机制用于区别类名的命名空间。包的本质就是文件夹,其语法为:

package package1[.package2[.package3...]];

一般使用公司域名倒置作为包名如com.baidu.www。使用包中的成员时需要在Java中导入包,pkg的导入必须放在最上面:

import package1[.package2...].(classname|*);

JavaDoc

javadoc用于生成api文档,加在类里面就是类的注释,加在方法里面就是方法的注释。


文章作者: eacryo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 eacryo !
  目录