美文网首页Java 之旅
初级01 - Java程序的基本结构

初级01 - Java程序的基本结构

作者: 晓风残月1994 | 来源:发表于2019-07-24 00:10 被阅读0次

1. Java语言的跨平台性与字节码概述

  • 计算机中操作内存最小的单位是一个字节,1 byte = 8 bit
  • Java 通过 Java virtual machine 实现跨平台桥梁
  • Java --compile--> bytecode ----> JVM ----> Linux/Win/Mac

2. Java语言的基本单元-类与包

类和文件名是相同的。一个Java的类文件只能包含一个和它同名的public 成员(类、抽象类、接口),非 public 成员可以包含多个。
默认包default package,即 src/main/java,每个 class 都处在一个 package 中,包名取决于 class 所在的目录结构。

  • 包的第一个用处是区分不同的类
  • 包的第二个用处是访问控制(见下文)

全限定类名(FQCN-Full Qualified Class Name),由包目录名决定,在 jvm 眼中所有的类名都是 fqcn。只要是不在一个包,如果用到需要用的类,就需要import语句引进来。有时候为了防止类名冲突,需要写全(InteliJ 中使用 alt+enter 开启智能提示):

package com.github.hcsp;
import com.github.hcsp.pet1.Cat;

public class Home {
    Cat cat1;
    com.github.hcsp.pet2.Cat cat2; // 如果这里也使用 import 功能,就会类名冲突
}

maven 项目结构约定:
src ---> mian/java
---------- test/java

String类和 System是 jvm 内置的类,不需要 import java.lang.String 显示引入。

3. 方法、静态方法和静态变量

public class Main {
    public static int i; // 静态成员变量
    public static void main(String[] args) { // main 方法,也是程序入口
        add();
    }
    public static void add() { // 静态方法
        int j = 3; // 局部变量
        i = i + j;
    }
}

4. 对象、构造器和实例变量

创建的 class 假如没有声明任何构造器,编译器会自动帮助生成一个:

public class Cat {
    // 实例变量
    public String name;
    // 编译器自动生成
    public Cat() {
    }  
    // 自定义
    public Cat(String name) {
        this.name = name; // 对象的实例属性和实例方法在不引起歧义的情况下,可以不用 this
    // 因为这里形参也叫 name,所以才加以区分
    }
    // 实例方法
    public void meow() {
        System.out.println("喵~我是" + name);
    }
}

在 null 上调用方法,会报错空指针异常 java.lang.NullPointerException

5. 包、类、静态成员、静态方法、实例成员、实例方法

区分标识是有
There are four levels of access in Java:

private - only that class has access
no descriptor - that class and everything in the same package
protected - that class, same package, descendants of that class
public - everything

6. 对象和引用详解

Java 中所有对象都只是引用(地址),赋值时只是复制地址,但指向的还是同一块内存空间。所以存在 shallowCopy 和 deepCopy 的问题。

7. 方法的传值 vs 传引用(地址)

main 是 java 执行的入口,在每次调用方法时,java 都会创建全新的执行环境。
java 中的数据类型分为两类:

  • 原生数据类型: int、float、double
    声明的变量就是数据本身。
  • 引用数据类型(对象):各种 class、String 等。
    声明的变量只是存了地址,而地址指 向数据本身。

方法调用时无论是传值还是传引用,本质上都是一样的,都是复制,只不过一个传的就是原始数据本身,而另一个传的是对象地址。
所以严格来说,其实方法的调用都是在传值(复制变量中存的原始类型的数据,或对象地址)。

相关文章

网友评论

    本文标题:初级01 - Java程序的基本结构

    本文链接:https://www.haomeiwen.com/subject/bcwzkctx.html