1、能正确编译出Hello World结果的是:Javac Hello World.java
2、Java的运行机制描述:
- ClassLoader 是 JVM 实现的一部分
- Java 编译器会将程序编译为 Java 虚拟机可以执行的字节码
- Java 虚拟机(Java Virutal Machine)简称 JVM ,用于执行 Java 字节码
- Java 运行时环境(Java Runtime Evironment)简称 JRE ,用于运行 Java 程序,包含 JVM
- Java 开发工具包(Java Development Kit)用于开发Java程序,包含JRE和 Java 编译工具等
Classloader是JVM中的类加载器,用于加载.class字节码文件到JVM中;ClassLoader从上到下bootstrap,extension,system,custom,当需要加载类时,从下往上询问,父加载器可以加载则父加载器加载,不能则由子加载器加载(双亲委派机制)
JVM无法直接读取java代码,需要先编译后解码在读取
包含关系:JDK(java开发工具包)>JRE(java运行时环境)>JVM(java虚拟机), 其中, JDK = JRE + Java编译工具,JRE = JVM + Java核心类库
3、Java 的 CLASSPATH 设置:
- 可以通过
java
命令的-cp
参数指定 class path - 设置 Windows 系统的 %CLASSPATH% 变量可以设定 class path
- 设置 Unix/Linux 系统的 $\$CLASSPATH 变量可以设定 class path
4、 JAVA HOME 设置:
- 通过设定 JAVA HOME 变量和 PATH 变量,可以在同一台机器上的多个不同版本的 JAVA 系统中选择使用
- 在 Linux/Unix Shell 环境中,使用
$JAVA_HONME
系统变量,在 WINDOWS 批处理环境,使用%JAVA_HOME%
,它们表示同一个变量名 - Java 系统会根据 Java Home 推导一些环境设置,例如库路径
5、Maven:是一个项目管理工具,可以管理项目中的依赖,maven项目中的pom.xml文件是项目的配置文件
6、Java程序基本结构:例如
public app{
publicstatic main(String[] args){
for(int i=0;i<10;i++){
System.out.println(i);
}
}
}
没有class直接编译不通过
加上class不加void运行不通过
7、注释详解:
一)注释的重要性
编写程序的时候,总需要为程序添加一些注释,用以说明某段代码的作用,或者说明某个类的用途,某个方法的工能,以及该方法的的参数和返回值的数据类型以及意义等
程序注释的作用非常大,很多初学者在刚刚学习java程序的时候,会很努力的写程序,不太会注意添加注释。认为添加注释是一种浪费时间,没有意义的事情。经过一段时间的学习,注意到程序书写的不足,需要重构。于是打开源码,以为可以很轻松的改写原有代码,但这个时候会发现理解原来写的代码会非常的困难,很难理解原有的编程思路。
为什么需要添加注释,至少有如下三方面的考虑:
1 永远不要过于相信自己的理解能力:
2 可读性第一,效率第二!
3 代码即文档:
程序注释是源代码的一个重要部分,对于一份规范的程序源代码而言,注释应该占到源代码的三分之一以上。几乎所有的编程都提供了注释的方法,一般包括,单行注释,多行注释。java语言也不例外,不仅包括单行注释,多行注释,还提供了一种文档注释。java语言的注释一共有三种类型。
(二)java的三种注释
单行注释:在程序中注释一行代码
多行注释:一次性的将程序中多行代码注释掉。
文档注释:注释允许你在程序中嵌入关于程序的信息。
(三)单行注释,多行注释
单行注释:将双斜线//放到需要注释的内容之前就可以了。
多行注释:使用/* 和 */ 将程序中需要注释的内容包含起来。
/* 表示注释的开始 */ 表示注释的结束。
(四)增强文档注释
java还提供了一种功能更强大的注释形式,文档注释。它以 /** 开始,以 */结束。例子如下:
/*** * 这是一个注释 * @author alan * @version 1.2 */
如果编写java源代码的过程中添加了文档注释吗,然后通过JDK提供的javac工具可以直接将源代码里的文档注释提取程一份系统的API文档。
标签 | 描述 | 示例 |
@author | 标识一个类的作者 | @author description |
@deprecated | 指名一个过期的类或成员 | @deprecated description |
{@docRoot} | 指明当前文档根目录的路径 | Directory Path |
@exception | 标志一个类抛出的异常 | @exception exception-name explanation |
{@inheritDoc} | 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. |
{@link} | 插入一个到另一个主题的链接 | {@link name text} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 指定一个到另一个主题的链接 | @see anchor |
@serial | 说明一个序列化属性 | @serial description |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
@serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
@since | 标记当引入一个特定的变化时 | @since release |
@throws | 和 @exception标签一样. | The @throws tag has the same meaning as the @exception tag. |
{@value} | 显示常量的值,该常量必须是static属性。 | Displays the value of a constant, which must be a static field. |
@version | 指定类的版本 | @version info |
javadoc 输出什么?
javadoc 工具将你 Java 程序的源代码作为输入,输出一些包含你程序注释的HTML文件。
每一个类的信息将在独自的HTML文件里。javadoc 也可以输出继承的树形结构和索引。
由于 javadoc 的实现不同,工作也可能不同,你需要检查你的 Java 开发系统的版本等细节,选择合适的 Javadoc 版本。
8、常量定义:const是Java的一个保留关键字,没有实际意义,所以就造成了const int a =100. ==int a==100
9、运算符:
1、比较运算符:
是两个数据之间进行比较的运算,运算结果都是布尔值true和false。
赋值运算符包括: |
|
== |
比较符号两边数据是否相等,相等结果是true |
< |
比较符号左边的数据是否小于右边的数据,如果小于结果是true |
> |
比较符号左边的数据是否大于右边的数据,如果大于结果是true |
<= |
比较符号左边的数据是否小于等于右边的数据,如果小于等于结果是true |
>= |
比较符号左边的数据是否大于等于右边的数据,如果大于等于结果是true |
!= |
比较符号两边数据是否不相等,不相等结果是true |
注意事项:
1.比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false。
2.如果进行多次判断,不能连着写,例如1<x<3,此时需要用到逻辑运算符。
2、逻辑运算符:
与(并且) && 全都是true才是true,否则是false
或(或者) || 有一个是true就是true;全都是false就是false
非(取反) !本来是true,变成false;本来是false,变成true
与&&,或||,具有短路效果,如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。
注意事项:
1.逻辑运算符只能用于boolean值。
2.与、或需要左右各自有一个boolean值,但是取反只要有一个唯一的boolean值即可。
3.与、或两种运算符,如果有多个条件,可以连续写。
两个条件:条件A && 条件B
多个条件:条件A && 条件B && 条件C && ...
逻辑运算符的短路特性:
- 对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式;
- 对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第二个表达式;
10、for循环的注意事项和细节:
for(;循环判断条件;)
中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。如:
int i = 1;
for (;i <= 10;) {
System.out.println("你好,五号位"+i);
i++;
}
循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
int count = 3;
for (int i = 0,j = 0; i < count; i++,j += 2) {
System.out.println("i=" + i + "j=" + j);
}
11、集合
1、Collection接口
常用方法
- boolean add(E e)
确保此集合包含指定的元素(可选操作)。 - int size()
返回此集合中的元素数。 - void clear()
从此集合中删除所有元素(可选操作)。 - Object[ ] toArray()
返回一个包含此集合中所有元素的数组。 - boolean isEmpty()
如果此集合不包含元素,则返回 true 。
import java.util.ArrayList;
import java.util.Collection;
class Customer{
String name;
int age;
Customer(String name,int age){
this.age = age;
this.name = name;
}
public String toString(){
return "Customer[name="+name+"age="+age+"]";
}
}
publicclass CollectionTest01 {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
//1.创建集合
//Collection c = new Collection(); 写法错误,接口不能new,需借助实现类
Collection c = new ArrayList(); //利用多态
//2.添加元素
c.add(1); //自动装箱
c.add(new Integer(100));
Object o = new Object();
c.add(o); //Collection集合只能单个存储元素
Customer cust = new Customer("张三",20);
c.add(cust);
//3.将集合转换成Object类型数组
Object[] objs = c.toArray();
//遍历该数组
for(int i=0;i<objs.length;i++){
System.out.println(objs[i]);
}
//4.获取元素的个数
System.out.println(c.size()); //4
System.out.println(c.isEmpty()); //false
//5.清空元素
c.clear();
System.out.println(c.size()); //0
System.out.println(c.isEmpty()); //true
}
}
- Iterator iterator()
返回此集合中的元素的迭代器。
import java.util.*;
publicclass CollectionTest02 {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
//创建集合对象
Collection<Comparable> c = new LinkedList<Comparable>();
//添加元素
c.add(10);
c.add(3.14);
c.add(true);
//迭代
//1.获取迭代对象
Iterator<Comparable> it = c.iterator();
System.out.println(it); //java.util.AbstractList$Itr是ArrayList集合所依赖的迭代器
//java.util.LinkedList$ListItr是LinkedList集合所依赖的迭代器
//Itr 、ListItr是内部类
//迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的"迭代器对象"
//2.遍历集合调用Collection内部方法
while(it.hasNext()){
Object element = it.next();
System.out.println(element);
}
/*
boolean b = it.hasNext(); 判断是否有更多的元素
Object element = it.next(); 将迭代器下移一位,并且取出指向的元素
原则:it.next()之前必须先调用it.hasNext()方法,防止出现空指针异常
*/
/*for(Iterator<Comparable> it1 = c.iterator();it.hasNext();){
Object element1 = it.next();
System.out.println(element1);
}
*/
}
}
- boolean contains(Object o)
如果此集合包含指定的元素,则返回 true 。 - boolean remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 - 存储在集合中的元素应该去重写equals方法