java基础知识总结(一)

满满的干货=-=

(一)环境变量的作用: 每个人刚开始学习java的时候,肯定都是安装JDK,配置环境变量,怎么配置网上教程很多很多,但是为什么这么配置呢?

我配置的环境变量:

  • JAVA_HOME:C:\Program Files\Java\jdk1.8.0_172
  • Path:%JAVA_HOME%\bin
  • CLASSPATH:.(一个.)    

网上比较全面的环境变量:

  • (1)JAVA_HOME:C:\Java\jdk1.8.0_05(即JDK的安装路径) 
  • (2)Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
  • (3)CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(注意前面的一个.)

为什么有的需要配而有的不需要呢?下面来说每一个环境变量的具体作用:  

  • JAVA_HOME:这个算是这三个里面最重要的了,如果你刚开始学肯定会怀疑为什么Path里面要引用JAVA_HOME,而不是直接写一个C:\Program Files\Java\jdk1.8.0_172\bin,如果你没有这么思考过,那你学习知识就有点。。。其实JAVA_HOME的 存在是有原因的,原因之一:作为JDK位置的引用命名,方便管理,Path中引用JAVA_HOME后,以后更换JDK只需要修改JAVA_HOME就完事了,原因之二:如果你继续往后学的话,使用eclipse你会发现eclipse自动找到了你的JDK,这就是 因为eclipse找到了你的JAVA_HOME,包括以后一些软件例如Tomcat,如果你没有JAVA_HOME,将无法启动。
  • Path:这个并不是java特有的,这是windows系统可执行文件的存放路劲,比如说你打开cmd,然后在C:\Users\DEVELOPER>目录下输入了一个qq.exe命令,系统首先在当前目录下搜索是否有qq.exe文件,如果没有就去Path下配置的所有路径当中寻找,还没有就报"不是内部或外部命令,也不是可运行的程序或批处理文件"。我配置这个%JAVA_HOME%\bin是为了找到java.exe、javac.exe等命令,网上教程的%JAVA_HOME%\jre\bin是为了找到java.exe、javaw.exe等,大家可以打开目录自己去看一下就知道都有什么命令了。而我们配置这些命令的搜索路径,目的只有一个那就是你写一个java文件要通过cmd(命令行界面)来编译和运行,先通过javac xxxxx.java生成class文件,再java xxxxx来执行。我相信当你用到eclipse之后就不会再这么折磨自己了。所有说当使用IDE开发后path下的配置的java环境变量就没有用了。
  • CLASSPATH:同上,也是在cmd(命令行界面)来编译和运行,先通过javac xxxxx.java生成class文件,再java xxxxx来执行。这个CLASSPATH就是class文件的存放路径,如果在编译的时候不知道class的生成路径,默认是在当前目录下生成,也就是和源代码java文件在一块,然后再执行java xxxxx命令开始执行class文件,看起来好像是没有问题,但是如果在class文件当中需要引用其他class文件(也就是导包,或者同一包下的其他类)运行就会失败,因为系统找不到需要的class文件,CLASSPATH的目的就是告诉系统去哪里找class文件,一个“.”代表当前目录下寻找,一般是自己写的多个类,编译后生成多个class文件。%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar是去JDK中寻找官方的类库(jar包就是class文件的集合),so,CLASSPATH没有用,因为我们是用IDE开发,IDE自己有自己管理class文件的方式,我们不需要关心它在哪存放,去哪寻找,我们只写代码,编译并运行就好啦。

综上所述。三个环境变量,只有JAVA_HOME是必须要配置的(例如:没有JAVA_HOME,Tomcat服务器是打不开的)。Path和CLASSPATH只是在命令行界面要用到的,使用IDE开发就没有作用了。

(二)修饰符总结

  我刚开始学习的时候,到修饰符这真的是一脸懵逼,就比如说我们平时常用的public、protected、default、private、static、final、abstract组合起来分别取修饰类、属性、方法,那么多情况简直让人头皮发麻。其实修饰符这里不用太去计较,在学习的过程中逐渐就会明白什么情况下用什么了。没必要很着急的去掌握每一种情况。

  (1)权限修饰符:修饰类、属性和方法,用于表示访问权限,权限从高到低位:public>protected>默认(就是没有写权限修饰符)>private

      •  private :私有权限,只能在当前类下访问,一般用来修饰属性,将属性封装起来不为他人道也。
      •  默认(default) :默认就是包访问权限,只能在同一包下进行访问,不同包下的子类也不能访问,注意区别protected,
      •  protected: 子类访问权限,同一包下和不同包的子类可以访问(比默认权限多了一个不同包下的子类)
      •  public :公共访问权限,即没有限制,公交车人人皆可上。

    对于权限修饰符来说,区别protected和default的方法是:protected总是保护自己的孩子嘛,当然是子访问权限啦,我们在开发阶段只需要掌握private和public就足够了,前者用来修饰属性,后者用来修饰构造器和方法。以此来实现属性不可见,仅向外提供操作的面向对象思想

  (2)状态修饰符-static:可以修饰成员变量和方法,表示成员变量或者方法是属于类的,被所有对象所共享,随着类的加载而加载(加载在方法区的静态区),意思是不需要对象即可调用,比如说Arrays类中的所有方法都是static的调用时直接通过类名.方法名调用

  (3)状态修饰符-final:可以修饰类,方法,变量。修饰类,类不能被继承。修饰方法,方法不能被重写。修饰变量变量是一个常量(不可更改,当变量是一个引用类型时,不可被更改的是地址值,而地址值对应的内容可以更改,似乎没有多大用处,所有一般用来修饰基本类型)。对于static和final总结一下,static的本意是静态,一般有俩种用途:其一是系统提供的工具类,这些类造对象是毫无意义的,static可以让他们直接通过类名调用方法,例如Arrays.toString(int[] a)。其二是我们自己写的类,这些类实例化的时候对象的某个属性或许某个方法全部都一样,static可以帮助我们只初始化一次,大大提高效率,说到这里已经很明显了,那么既然static是修饰对象所共有的一样的属性或者方法,那么他的值基本就固定了,我们便用final来声明这个属性或者方法不可更改,所以说有static的地方一般都有final(有的同学可能去看了Arrays的源码,发现所有方法都只有static修饰却没有final,同学们别忘了啊,final修饰方法是防止方法被重写,而Arrays类的构造器是private的,没有构造器就没有子类,没有子类哪来的方法重写),而有final却不一定有static,final修饰的是一个常量,而常量在使用前是必须赋值的(没有值叫什么常量啊)。下面是俩种初始化方法:

public class FinalDemo {
    
    private final int a;
    
    public FinalDemo(int a) {
        this.a = a;
    }

}
public class FinalDemo {
    
    private final int a = 2;
    
}

final最常见的用途是,在局部内部类引用局部变量时扩大局部变量的生命周期,所谓的扩大生命周期就是,将一个虚拟机栈(局部变量)的数据移动到方法区(常量)中(详情在下图),以防止局部变量过短的生命周期走到头而局部内部类还在使用该变量

 

 

 

  (4)抽象修饰符-abstract:可以修饰类和方法,修饰类,类是抽象类,修饰方法,方法是抽象方法(没有方法体的方法)需要子类或者实现类重写此方法,注意,有抽象方法的类一定是抽象类,也必须是抽象类,抽象类中不一定有抽象方法(那么没有抽象方法的抽象类有什么作用呢?抽象类是不能实例化的,即禁止他创对象),接口中方法修饰符都是public abstract(无论你写或是不写,默认都是这俩个)

总结一下:禁止类创建对象的俩种方式

  • 构造器私有:该类不能创建对象,同是也不能被其他类继承,一般用作工具类。
  • 将类抽象化:该类不能创建对象,强迫其他类来继承他,重写某些方法。

 

 

 

 

 

 

 

            

posted @ 2018-07-23 17:02  GolLong  阅读(518)  评论(2编辑  收藏  举报