Java笔记

1.配置临时变量
set命令。直接输入set,可以查看所有当前的环境变量;“set 变量名”获得指定变量名的环境变量;动态获取已有的环境变量 值“%环境变量
名%”
2.在类名前加了public,则类名要和.java文件名一样。
比如:类名为public class demo{},怎对应的.java文件名要为demo.java。
3.javac 文件名.java 将java源文件编译为.class的文件。.class文件的文件名是和类名一样的。
4.虚拟机 先找的是自定义环境变量(区别于系统的path变量),然后再硬盘下。
5.在配置自定义环境变量时,不要加分号。
6.将一个数左移,如:3<<2=3*2^2;即a<<n=a*2^n
7.将一个数右移,如:6>>1=6/2^1;即a>>n=a/2^n
8.>>:右移最高位补0还是补1,和原本的最高位一致
9.>>>:无论最高位是什么,右移后,都用0补 
10.一个数的二进制的负数形式是将这个数取反(~)然后加1
11.二进制转为十六进制是将二进制分每4位一组,转为十六进制
12.for前面能加上标记,在break的时候,可以跳出指定for
比如: a:for() { b:for(){break a;} }这边跳出的a(但是a都跳出了,,b肯定也跳出了)
13.new 出来的对象 的内存是在堆中。例如:int[] a=new int[3]; 栈中一个变量a指向了堆中一块内存为3 的空间。
栈的内存自动释放,堆的内存垃圾回收机制
14.this构造函数必须放在别的构造函数的第一行。构造函数之间可以相互调用,但是不能循环调用,否则出现死循环。
15.static成员能被类名和对象调用
16.java程序说明书的制作,类必须是public公有的,私有的方法不会被编入说明书中
在类的最前面:
/**
该类的说明
@author 张三
@version V1.1
方法说明:
/**
该方法的说明
@param 参数名1参数描述之类的
@param 参数名2参数描述之类的
@return 返回值描述
*/
字段属性 一样。
编辑完成之后,使用javadoc来生成说明文档。命令:javadoc -d 存放的目录 源文件名
17.构造代码块,是在实例化一个对象的时候调用
静态代码块,是在类加载的时候调用
执行顺序:静态代码块->静态属性建立并初始化->有默认值得属性初始化->构造代码块->构造函数
18.super指向父类对象
19.重写,子类的访问权限必须不小于父类,且方法一模一样,返回值不一样的方法是不允许出现的
20.子类要调用父类指定的构造函数,需要显示指定“super(参数...)”,且只能在第一行。
21.final修饰类,则这个类不能被继承,如果是方法,则子类不能重写 改方法。
22.被final修饰的变量,只能初始化一次。
23.抽象方法必须定义在抽象类中,子类必须实现 父类的所有抽象方法。抽象类就是强制子类要实现方法。
24.抽象类中也可以有实例方法。抽象类不能实例化。

25.抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充。抽象方法不能有函数体。

26.接口中的属性只能是静态的static,但是可以不写,编译器会自动加上(final关键字也一样)。因为interface中的成员都有特定的修饰符。

27.实现接口的关键字implements。接口之间不能有同名同参数不同返回类型的方法。

28.判断对象是否是某种类型用instanceof关键字,类似于C#的is。 “对象A instanceof 类B”,对象A是否是类B的对象。如果某对象是继承而来的,比如继承于C类(或者C是接口),则对象A instanceof C则会为true。

29.接口的一个运用场景,关于数据库连接,因为市场上有太多的数据库,且项目的数据访问方式有可能随时改变,导致数据库一变,代码就要做很大的变动,所以如果将数据库访问的操作(增删改查),封装成一个接口,规范了每一个子类必须实现增删改查操作,所以如果有新的数据库,则只需要再加一个子类实现接口,然后调用的方式就是用接口的对象去调用,由于多态的特性,接口的对象会去调用子类的方法。接口的运用场景,其实也就是同样的操作,有可能有不同的操作对象,为了避免修改操作的源码,可以使用接口。

 30.重写父类object的equals方法,重写意味着方法的签名完全一致,所以参数肯定也是一致的,父类object的equals参数是object,如果要自定义自己子类的判断是否相等的equals方法,比如某个属性是否相等,因为参数object肯定没有那个属性,所以要进行一个强转的操作,因为传进来的有可能是各种类型的对象,所以要进行一个类型判断,综上,代码如下:

public boolean equals(Object obj)
{
    if(!(obj instanceof 类名))  //类名指向要重写的类名
          return false;
     return this.属性==obj.属性  ;//属性指向要比较的属性
}

31.内部类。内部类的函数通过“外层类.this.成员”来访问外层类的成员,内部类可以用private来修饰,最外层类不能用private来修饰。如果内部类是非private,则在声明内部类对象的时候是通过,“外层类.内部类 变量=new 外层类().new 内部类()”。内部类如果为静态,则只能访问外部类的静态成员。内部静态类调用内部类的非静态方法通过“ new 外部类.内部类().非静态成员”。如果是静态成员则直接通过 “外部类.内部类.静态方法”。当静态类为非静态类,则静态类内部不能定义静态成员,也就是说如果内部类中有静态成员,则这个内部类必须是静态的。当外层类的静态方法访问内部类时,内部类也必须是静态的。

32.内部类的使用情况,当这个类,要直接访问外部类的成员时,可以将类声明在一个类中。

33.异常Exception e   ,    e.printStackTrack打印异常的堆栈跟踪信息

34.如果在catch块中执行了return语句,且发生了异常,finally还是会继续执行,但是finally结束后的语句不会执行;如果catch块中没有return,且发生了异常,则finally执行后,finally块后的语句还会继续执行;在try中,也一样。

在try,catch,finally中如果都有return,则返回的是finally中的值;什么时候会返回catch中的值呢,就是在try中出错,且finally中没有return的时候;什么时候会返回try中的值呢,就是在try中不出错,且finally中没有return的时候。

原文地址:https://www.cnblogs.com/LJP-JumpAndFly/p/4676699.html