Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包
一、java中的包
java利用包来组织代码,一来使大型项目的代码结构清晰,二来包是一个命名空间的划分,即不同包中可以有相同名字的类,只需在在类名前加上包名即可区分它们。
package xxx 必须位于java文件除了注释以外的第一行,用来指明当前文件中的类属于哪一个包,如果没有package语句,则该文件中的类都属于默认包。
import xxx用来在当前java文件中导入不属于当前包中的类,从而可以在当前文件中使用它们。
二、java中的环境变量
1.path
环境变量其实就是一组变量(废话),它的作用是给系统和应用程序提供参数。例如:path,它告诉系统和应用程序一些系统必备的程序的存储位置,比如你要运行ipconfig命令,系统去哪里找它呢,就是通过path变量,把它所存储的位置挨个找一遍,直到找到为止。
在java中,当我们要运行java程序,在控制台输入java xxx时,java这个应用程序(exe文件)到哪里找呢?系统就得通过path,这样就得把包含java这个应用程序的目录拷贝到path环境变量中,这样以后,再运行java xxx 就不会出现“‘java'不是内部或外部命令,也不是可运行的程序或批处理文件。”了。
2.classpath
说完path,再来说说classpath,解决了java这个命令的问题,还有javac这个命令的问题,这里就牵扯到java中的包机制了。
java程序是由一个一个类构成的,类之间可以相互调用,还有一些java语言已经定义好的类,那么当程序要用到这些类的时候,去哪里找他们呢,这就需要classpath这个环境变量来指点迷津了。
总结:classpath指明了类查找路径,如果类没有被打包,那就需要将其所在目录添加到classpath中,如果类被打包为jar文件,则需要将jar文件的实际名称写清楚。
classpath一般设置为“.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar;”
其中.代表当前目录,%java_home%代表java jdk的路径。dt.jar中主要是swing包中的各种控件类。tools.jar中是各种工具类。
当编译器碰到import语句时,就开始在classpath所包含的目录中查找。
(参考:http://www.linuxidc.com/linux/2012-01/52713.htm)
3.java_home
指明jdk的路径
三、访问权限控制
1.类成员的访问控制
访问控制符:public/protected/包访问权限(无关键字即默认)/private
|
类本身 |
同包中的子类 |
不同包中的子类 |
同包中的非子类 |
不同包中的非子类 |
总之 |
public |
可以 |
可以 |
可以 |
可以 |
可以 |
都可以 |
private |
可以 |
不可以 |
不可以 |
不可以 |
不可以 |
仅自身可见 |
default |
可以 |
可以 |
不可以 |
可以 |
不可以 |
仅同包可见 |
protected |
可以 |
可以 |
可以 |
可以 |
不可以 |
子类或者同包可见 |
2.类的访问控制权限
类只有两种访问控制权限:默认(即包访问控制权限)和public
下面还有点时间,接着给大家介绍maven profile实现多环境打包
项目开发需要有多个环境,一般为开发,测试,预发,正式4个环境,通过maven可以实现按不同环境进行打包部署,命令为:
mvn package -p dev
其中“dev“为环境的变量id, 可以自己定义, 我定义的名称为:dev,qa,pre,prod , 具体在pom.xml中的配置如下:
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> ...... <profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activebydefault>true</activebydefault> </activation> </profile> <profile> <id>qa</id> <properties> <env>qa</env> </properties> </profile> <profile> <id>pre</id> <properties> <env>pre</env> </properties> </profile> <profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> </profiles> ...... <build> <filters> <filter>config/${env}.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> ...... </build> </project>
1.profiles定义了各个环境的变量id
2.filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profile中定义的值
3.resources中是定义哪些目录下的文件会被配置文件中定义的变量替换,一般我们会把项目的配置文件放在src/main/resources下,像db,bean等,里面用到的变量在打包时就会根据filter中的变量配置替换成固定值
下一篇: Java8中使用流方式查询数据库的方法