java:path和classpath;jdk与jre;protected与default(又称friendly)

一path和classpath

path:JDK的安装目录。java编译运行工具的目录。

classpath:classpath是java系统包的目录。java的工具类所在地址。执行javac后.class文件存放的地址。

JAVA_HOME:java安装目录的公用名称。

配置好这些环境变量,java才能正常编译和运行。配置java环境变量就是要让其他基于java运行的程序能够找到javaw.exe之类的程序和jar包,才能进行运行。

环境变量path就是当你不指定路径而直接按照文件名启动某程序或库函数是他会上path所配置的路劲去找那个指定的程序名。

classpath类似,就是要在程序中不指定class文件时,按照classpath中的路径去自动查找。

二jdk与jre

三java中的访问控制权限:【protected和省略(default,也叫friendly)的区别】

1.类的访问范围

A、public表示该类在所有包中可见

B、省略(default,也叫friendly)表示该类仅在同一个包中可见

不能用protected和private修饰类

(修饰符:final—终态类,表示该类不能被继承;abstract—抽象类,不能新建对象)

2.成员变量及成员方法的访问范围

A、public:包内、包外的所有类中可见

B、protected:包内所有类可见,包外有继承关系的子类可见(子类对象可调用)

C、省略(default或friendly)表示默认:本类和同包类可见

D、private:仅本类可见

 

public

Protected

Default(工作不用)

private

同类

T

T

T

T

同包

T

T

T

 

子类(不同包)

T

T

 

 

不同包中无继承关系的类

T

 

 

 

具体的关键字说明:

1、  私有权限(private):私有,除了本类以外任何类都不可用(子女,朋友都不可以使用);

可修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。

2、  默认权限(default)也叫friendly:即不写任何关键字类。同包的类中可见。

数据成员,构造方法,方法成员,都能够使用默认权限。

3、  受保护权限(protected):对于子女、朋友是public,无限制;而对于其他外部类是private。

protected可修饰数据成员,构造方法,方法成员;不能修饰类(此处指外部类,不考虑内部类)。

4、  公共权限(public):对所有用户开放。

可修饰类,数据成员,构造方法,方法成员。

修饰符:

成员变量的修饰符

static—静态变量,被类的所有实例共享

final—常量,定义后不能修改

*transient—告诉编译器,类对象序列化的时此变量不需要持久保存,因为其可通过其他变量获得。

*volatile—指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理

这两带*的不常用

成员方法(method)修饰符

static—静态方法,并不需要创建类的实例就可以访问静态方法

final—所有子类不能覆盖和重载该方法。static一起使用可以避免对类的每个实例维护一个拷贝

abstract—抽象方法,(抽象)类中声明但没有实现的方法。所以不能将static、final的方法或者类的构造器方法声明为abstract

native—本地方法,定义的方法在类中没有实现,而大多数情况下该方法的实现是用C、C++编写的。参见Java Native Interface(JNI) JNI提供了运行时加载一个native方法的实现,并将其于一个Java类关联的功能

synchronized—多线程的支持。当此方法被调用时,没有其它线程能够调用该方法,其它的synchronized方法也不能调用,直到该方法返回。

接口(interface 名称 extends 接口列表)

接口中的变量:总定义为“publicstatic final 接口名称”,但可以省略,编译器默认就是这样

接口中的方法:只能用public和abstract修饰符。声明的方法只能定义,不能实现。

四Java中的final:

final类表示类不可被继承;final方法不可以被覆盖重载;final变量表示变量值不变。

Final修饰基本数据类型表示值(value)不变;

但修饰引用类型objectreference时,final仅让reference保持不变。reference一旦被初始化用于代表某个对象时,便再也不能改变指向另一个对象,但对象本身的内容可以改变。

final对array的作用和对reference的作用一样。                         

final内嵌机制(逐步被优化机制取消。可以不用,private方法不被外部调用,所以默认加final):

inline的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。

如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间

五Java性能优化

1、  避免创建不必要的对象;

2、  尽量用整型,浮点数比整形慢两倍。

3、用增强For循环for(:)可以提升效率

4、将不引用成员变量的方法声明为static,性能提升15%-20%;

5、避免使用getters/setters存取Field,可以把Field声明为public,直接访问;

6、static的变量如果不修改就用staticfinal修饰符定义为常量;

7、私有内部类访问外部类的Field或方法,可把外部类的Field或方法声明为默认(即省略关键字)

Java包中,提供访问器(accessor)和变异器(mutator)方法(也称作get/set方法),以读取和改变数值。对OOP而言,这是最优雅的方式,而且这也是JavaBeans的基本原理。


原文地址:https://www.cnblogs.com/cl1024cl/p/6205711.html