Diewuxi

Belive tomorrow will be better, love science and technology, support communication and understanding, always ready for thought turn.

Blog / engineering_technology / computer / code_interpreter / Java 笔记

Blog


Article^ Parent

Java 笔记


Date: 2020-07-25 14:00:00
Description: Java 笔记。
Keywords: Java, 笔记
Category: engineering_technology/computer/code_interpreter
Tag: java
Link: https://www.diewuxi.com/blog/article/67.html

Changelog

* 2024-08-19
    * Fix: Fix markdown format error.

* 2020-07-26
    * Add: 访问权限,静态字段和静态方法
    * Add: 包,Java 语言特点,数据类型,整型,浮点运算
    * Add: HelloWorld example 和 advance example.

* 2020-07-25
    * Done
                        

Get thing done

HelloWorld example

编写

Directory structure:

example/
    Helloworld.java
                        

File HelloWorld.java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
                        
  • 主类。类名必须要与文件名相同
  • 主方法。方法名是 main,程序入口
  • 参数。String[] args

编译:

Directory structure:

example/
    Helloworld.java
    Helloworld.class
                        

在 example 目录:

javac HelloWorld.java
                        

生成文件 HelloWorld.class,字节码文件可在虚拟机上运行

运行

在 example 目录:

java HelloWorld
                        
  • 运行 HelloWorld.class 时后缀 class 不加

Advance example

编写

Directory structure:

/<example>/
    src/
        org/
            _22web/
                dwx/
                    tool/
                        Alarm.java
/<example2>/
    foo/
        Bar.class
                        

File Alarm.java:

package org._22web.dwx.tool;

import foo.Bar;

public class Alarm
{
...
                        
  • package: 声明包,完全限定类名
  • import: 引入其它源文件中的类
  • Alarm 类属于包 org._22web.dwx.tool
  • Bar 类属于包 foo

编译

Directory structure:

/<example>/
    src/
        org/
            _22web/
                dwx/
                    tool/
                        Alarm.java
    target/
        org/
            _22web/
                dwx/
                    tool/
                        Alarm.class
/<example2>/
    foo/
        Bar.class
                        

在目录 <example>

javac -classpath /<example2> -d target Alarm.java
                        

在目录 target 生成文件 Alarm.class 和目录结构.

运行

Directory structure:

/<example>/
    src/
        org/
            _22web/
                dwx/
                    tool/
                        Alarm.java
    target/
        org/
            _22web/
                dwx/
                    tool/
                        Alarm.class
/<example2>/
    foo/
        Bar.class
                        

<example> 目录:

java -classpath /<example2>;target org._22web.dwx.tool.Alarm
                        

在 target 目录,可省略当前目录 classpath 设置:

java -classpath /<example2> org._22web.dwx.tool.Alarm
                        

在 target/org 目录:

java -classpath /<example2>;../target org._22web.dwx.tool.Alarm
                        
  • 不推荐在系统环境变量中设置 classpath,而是在启动JVM时设置,因为那样会污染整个系统环境
  • 运行基本命令:java -classpath <path> <full main class>
  • 需要运行的主类在当前目录和 -classpath 中寻找

  • 组织类,标识类,控制访问
  • 没有放入包内的类默认属于 "unnamed" 包
  • 构成完整限定类名 package1[.package2 ...].(classname|*)
  • 包没有父子关系。java.utiljava.util.zip是不同的包,两者没有任何继承关系

创建包

  1. 把源文件放入目录结构中
  2. 在源文件头部加入包声明

如,源文件:

<somepath>/org/_22web/dwx/tool/Alarm.java
                        

源文件内容:

package org._22web.dwx.tool;

public class Alarm
{
...
                        

使用包

源文件包声明之后类声明之前加入 import 语句

如源文件:

<somepath>/org/_22web/dwx/app/foo.java
                        

源文件内容:

package org._22web.dwx.app;

import org._22web.dwx.tool.Alarm;
...
                        
  • import 可以使用通配符 import org._22web.dwx.*;
  • 使用同一个包内的其它类可以省略包的类名

jar

  • jar 包相当于目录,可以包含很多 .class 文件,方便下载和使用
  • 把很多类文件打包成一个 zip 文件,再加入包信息,这就是 jar 包
  • MANIFEST.MF 文件可以提供 jar 包的信息,如 Main-Class,这样可以直接运行 jar 包
  • 用工具可以更方便地创建 jar,如 maven

如:

org/
    _22web/
        dwx/
            tool/
                Alarm.class
            tool2/
                Apple.class
com/
    baidu/
        tool/
            Search.class
                        

打包制作成 jar,如 tools.jar,使用时:

java -classspath tools.jar <program>
                        

Java 语言特点

组成:

  • 方法
  • 变量

语法:

  • 大小写敏感
  • 一个源码文件只能有一个 public 类,可以有多个非 public 类
  • 源码文件名与 public 类名必须相同
  • 从主方法开始运行 public static void main(String[] args)

访问权限管理

| type          | class, interface  | field, method                         |
| --------      | ----------------- | -----------------                     |
| public        | 被其它任何类访问  | class 可以访问的情况下被其它任何类访问|
| private       | ?                 | 不能被其它类访问(只能在所在类之内访问)|
| protected     | ?                 | 被子类以及子类的子类访问              |

| type          | class     | method    | field     |
| ------        | ----      | ----      | ----      |
| final         | 禁止继承  | 禁止重写  | 禁止赋值  |
                        

静态字段和静态方法

  • static 修饰
  • 静态字段通过类直接访问
  • 静态方法通过类直接访问,静态方法内部只能访问静态字段

数据类型

  • 等号=是赋值语句,不是数学意义上的相等

基本数据类型

基本数据类型是CPU可以直接进行运算的类型。 Java定义了以下几种基本数据类型:

  • 整数类型:byte,short,int,long
  • 浮点数类型:float,double
  • 字符类型:char
  • 布尔类型:boolean

整型表示范围:

byte:-128 ~ 127
short: -32768 ~ 32767
int: -2147483648 ~ 2147483647
long: -9223372036854775808 ~ 9223372036854775807
                        
  • Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符。

引用类型

基本类型之外的类型。

  • 字符串: String
  • 数组
  • ...

常量

整型数计算

  • 遵循四则运算规则,可以使用任意嵌套的小括号
  • 整数表示是精确的,运算的结果也是精确的(除法结果只得到整数部分,余数用 % 计算)
  • 计算结果超出类型表示范围会发生溢出,溢出不报错,只会得到一个奇怪的结果

运算优先级:

()
! ~ ++ --
* / %
+ -
<< >> >>>
&
|
+= -= *= /=
                        

浮点数计算

  • 浮点数常常无法精确表示,因此浮点数的运算结果可能有误差
  • 比较两个浮点数时通常比较它们的绝对值之差是否小于一个很小的值
  • 整型和浮点型运算时,整型会自动提升为浮点型
  • 可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值

基本类型对应的引用类型

基本类型对应的引用类型:

Byte
Short
Integer
Long
Float
Double
Character
Boolean
                        
  • 以类的方式使用基本类型
  • java 可以自动转换基本类型和对应的引用类型

数值计算

  • BigInteger: 软件模拟,可以表示任意大小的整数
  • BigDecimal: 软件模拟,可以表示一个任意大小且精度完全准确的浮点数

核心工具类

  • Math:数学计算
  • Random:生成伪随机数
  • SecureRandom:生成安全的随机数

Comments [0]

There is no comments now.

Write comment(* is necessary, and email is not shown to public)


Diewuxi 2017--2024