Java基础学习_1

本文最后更新于2015年1月11日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

记得当时还在学校的时候,在大二上?(不太确定……),自学过一段时间的Java(自己买的《Head First Java》进行学习的),当时只是刚刚学了C语言,还没有面向对象的概念,院里本来说是提供C++和Java供我们选择一门进行教学的,后来据说是因为院里面觉得搞安全的就应该学C++而不是Java,所以强制性的让每个人选了Java,当时觉得也没什么(C++比Java效率高;C#比Java开发效率快;为什么学Java呢?就因为它是面向对象的语言么?还是什么别的?),不过后来C++也没怎么学会,也就在学校的时候需要上机做作业、考试的时候需要用到,后来的实际工作中用不到(也因为没有找相关偏底层的工作),用的全是PHP、Python、shell这些,有时候会改一改C程序,反正和C++、Java什么的都不沾边,不过最近因为工作中碰到的一些工具大部分都是用Java写的,公司的主要编程语言也都是Java,不会点Java看来是跟不上趟了,不行,还是得学习学习Java,找了个之前就发现的Java教程一步一步过了一遍,有那么点感觉了,记录一下:

通过:Java快速教程 – Vamei 进行学习(因为之前已经看过一遍《Head First Java》了,而且也有过C++等语言的编程经验,学习起来不至于像计算机初学者那样完全从头开始,可以适当的快一点)。

主要在于:Java基础01Java基础07 这两篇文章,一篇是Java文件的命名和相关基础的介绍,另一篇是Java的package的概念,自己稍微记录了些内容如下。


之前已经写了一些Java程序。之前的每个Java程序都被保存为一个文件,比如Test.java。(在一个.java文件中,最多只能有一个类带有public关键字;并且该带有public关键字的类的名字与.java文件的名字要相同)随后,该程序被编译(使用命令javac进行的编译)为Test.class。我们最终使用$java Test来运行程序。

然而,在一个正常的Java项目中,我们往往需要编写不止一个.java程序,最终的Java产品包括了所有的Java程序。因此,Java需要解决组织Java程序的问题。包(package)的目的就是为了更好的组织Java程序

包的建立非常简单。我们只用在Java程序的开始加入package就可以了。

包为Java程序提供了一个命名空间(name space)。一个Java类的完整路径由它的包和类名共同构成,比如com.vamei.society.Human。相应的Human.java程序要放在com/vamei/society/下。类是由完整的路径识别的,所以不同的包中可以有同名的类,Java不会混淆。比如com.vamei.society.Human和com.vamei.creature.Human是两个不同的类。

包的调用:我们只需要将Human.java编译的Human.class放入相应的文件夹就可以了。比如,我将Human.class放入com/vamei/society/中。实际上,你也可以把.java文件放入相应路径,Java会在使用时自动编译。

如果整个包(也就是com文件夹)位于当前的工作路径中,那么不需要特别的设置,就可以使用包了:

  1. 在Java文件开头使用import语句
  2. 在代码中提供类的完整的路径
  3. 如果包没有放在当前工作路径下,我们在使用包时,需要通知Java
    • 一个方法是在使用javac和java时,用-classpath说明包所在的文件夹路径;
    • 另外也可以设置系统的CLASSPATH环境变量,将上述路径加入到该变量中,而不用每次都键入-classpath选项。


如何创建jar包?

Creating a JAR File

http://stackoverflow.com/questions/18146361/how-to-create-jar-file-with-package-structure

http://stackoverflow.com/questions/4597866/java-creating-jar-file


如何使用jar包?


在CentOS上安装/设置Maven
下载地址:

http://maven.apache.org/download.cgi

http://mirror.bjtu.edu.cn/apache/maven/binaries/

以版本apache-maven-3.0.4-bin.tar.gz为例:

文件存放好之后,设置环境变量:打开/etc/profile,进行编辑:

再执行以立即生效:

Maven的POM文件:http://maven.apache.org/pom.html

mvn常用命令:



Maven的常用命令为:

mvn archetype:create :创建 Maven 项目

mvn compile :编译源代码

mvn test-compile :编译测试代码

mvn test : 运行应用程序中的单元测试

mvn site : 生成项目相关信息的网站

mvn clean :清除目标目录中的生成结果

mvn package : 依据项目生成 jar 文件

mvn install :在本地 Repository 中安装 jar

mvn eclipse:eclipse :生成 Eclipse 项目文件

 

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/1779.html

《Java基础学习_1》上有16条评论

  1. Jvm加载jar包的顺序
    https://mp.weixin.qq.com/s/h4E59kcTxgUh8tQSj3VX4Q

    使用 -XX:+TraceClassPaths 或者在服务器上执行 jinfo 时,都能得到classpath包含的jar包信息。
    这些jar的顺序不同的机器总是不一样的,平时没有问题,所以也没有细想过,这些jar包的顺序为什么会不一样的。

    如果有多个同名的类只会加载其中第一个。

    问题就是jar的加载顺序问题,而这个顺序实际上是由文件系统决定的,Linux内部是用inode来指示文件的。jvm在Linux通过jar文件在文件系统中生成顺序来进行加载,在Linux底层是inode数据机构。

  2. 记一次微服务jvm加载jar顺序机制导致的bug
    https://mp.weixin.qq.com/s/Y0QFofzF_T9OYmb4kAS-zg

    问题从发生到定位花了较长时间,这个bug确实很神奇。现在复盘来看,主要是我们对于jvm、类加载机制,缺少深入了解,导致bug定位时间较长,后续要加强对于底层jvm各种机制原理理解,以方便快速定位线上问题。

    再有就是要加强代码review,设计实现review,通过审查避免一些问题,也是我们需要加强的方面。

    这样一个问题本身也说明了对于技术进行深挖的价值,对整个链条越理解,越是能找到薄弱点优化点,而不是为了轮子而轮子,为了架构而架构,进行合理并且不浪费的设计,才是合理的设计,过少或者过于复杂过多设计都不是好设计。

  3. Java面试通关要点汇总集
    http://blog.720ui.com/2018/java_interview/

    1. 基础篇
      1.1. 基本功
      1.2. 集合
      1.3. 线程
      1.4. 锁机制
    2. 核心篇
      2.1. 数据存储
      2.2. 缓存使用
      2.3. 消息队列
    3. 框架篇
      3.1. Spring
      3.2. Netty
    4. 微服务篇
      4.1. 微服务
      4.2. 分布式
      4.3. 安全问题
      4.4. 性能优化
    5. 工程篇
      5.1. 需求分析
      5.2. 设计能力
      5.3. 设计模式
      5.4. 业务工程
      5.5. 软实力

  4. 面试官:今日头条启动很快,你觉得可能是做了哪些优化?
    https://www.jianshu.com/p/d0fe74f4e9c4

    网上关于启动优化的文章多不胜数,内容千篇一律,大都是列举一些耗时操作,采用异步加载、懒加载等。

    而在面试过程中,关于启动优化的问题,如果只是很表面地回答耗时操作应该放在子线程,显然太过于普通,无法跟竞争者拉开差距。如何让面试官知道你的“内功深厚”,那肯定是要往原理层面去回答。

    本文重点还是关注原理,冷启动优化这个问题能延伸到很多原理层面的知识点,本文比较有意思的地方是通过反编译今日头条App,研究大厂的启动优化方案。

    讲启动优化之前,先看下应用的启动流程

    一、应用启动流程
    二、启动优化
    直奔主题,常见的启动优化方式大概有这些:
    · 闪屏页优化
    · MultipDex优化(本文重点)
    · 第三方库懒加载
    · WebView优化
    · 线程优化
    · 系统调用优化

    2.1 闪屏页优化
    2.2 MultiDex 优化(本文重点)
      2.2.1 apk编译流程
      2.2.2 MultiDex 原来这么耗时
      2.2.3 MultiDex 原理
      2.2.4 ClassLoader 加载类原理
      2.2.5 原理小结
      2.2.6 MultiDex 优化(两种方案)
    2.3 预创建Activity
    2.4 第三方库懒加载
    2.5 WebView启动优化
    2.6 数据预加载
    2.7 线程优化

    三、启动耗时分析方法
    3.1 Systrace + 函数插桩
    3.2 BlockCanary 也可以检测

发表评论

电子邮件地址不会被公开。 必填项已用*标注