Java基础知识点

简介: 来自本人在Java技能书中所学知识的整理

1、能正确编译出Hello World结果的是:Javac Hello World.java

2、Java的运行机制描述:

  1. ClassLoader 是 JVM 实现的一部分
  2. Java 编译器会将程序编译为 Java 虚拟机可以执行的字节码
  3. Java 虚拟机(Java Virutal Machine)简称 JVM ,用于执行 Java 字节码
  4. Java 运行时环境(Java Runtime Evironment)简称 JRE ,用于运行 Java 程序,包含 JVM
  5. 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 设置:

  1. 可以通过 java 命令的 -cp 参数指定 class path
  2. 设置 Windows 系统的 %CLASSPATH% 变量可以设定 class path
  3. 设置 Unix/Linux 系统的 $\$CLASSPATH 变量可以设定 class path

4、 JAVA HOME 设置:

  1. 通过设定 JAVA HOME 变量和 PATH 变量,可以在同一台机器上的多个不同版本的 JAVA 系统中选择使用
  2. 在 Linux/Unix Shell 环境中,使用 $JAVA_HONME 系统变量,在 WINDOWS 批处理环境,使用 %JAVA_HOME% ,它们表示同一个变量名
  3. 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循环的注意事项和细节:

  1. 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方法
目录
相关文章
|
3月前
|
安全 Java 编译器
揭秘JAVA深渊:那些让你头大的最晦涩知识点,从泛型迷思到并发陷阱,你敢挑战吗?
【8月更文挑战第22天】Java中的难点常隐藏在其高级特性中,如泛型与类型擦除、并发编程中的内存可见性及指令重排,以及反射与动态代理等。这些特性虽强大却也晦涩,要求开发者深入理解JVM运作机制及计算机底层细节。例如,泛型在编译时检查类型以增强安全性,但在运行时因类型擦除而丢失类型信息,可能导致类型安全问题。并发编程中,内存可见性和指令重排对同步机制提出更高要求,不当处理会导致数据不一致。反射与动态代理虽提供运行时行为定制能力,但也增加了复杂度和性能开销。掌握这些知识需深厚的技术底蕴和实践经验。
77 2
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
4月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
70 0
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
1月前
|
安全 Java 编译器
Java基础-知识点(二)
Java基础-知识点(二)
13 0
|
1月前
|
存储 缓存 安全
Java基础-知识点(一)
Java基础-知识点(一)
17 0
|
3月前
|
安全 Java 程序员
阿里开发手册 嵩山版-编程规约 (四)OOP规约-Java程序员必看知识点!!!
《阿里开发手册 嵩山版》的OOP规约部分强调了面向对象编程的最佳实践,包括正确使用静态方法、覆写方法的注解、可变参数的使用、接口的稳定性、equals和compareTo方法的使用、BigDecimal的正确比较、包装类与基本数据类型选择、POJO类的属性和方法设计等,以提升代码的质量和维护性。
|
5月前
|
存储 Java API
Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)
Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)
Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)