类与包

  • 类是java项目最小的结构单元,类名与其文件名必须一致,类处于包中,包名由类所在的目录结构确定
  • 包名的建议为公司域名反序 + 类目录位置,如com.google.xxx
  • maven 项目建议约定 生产代码在scr目录下,测试代码在test目录下
  • jvm 识别的类型均为全限定类名 full qualified class name以防止命名冲突,如下JVM是不识别Cat cat1;中的Cat的,它只认com.github.hcsp.pet1.Cat,要想使用简写类名,在不引起歧义的情况可使用import简化 ```java package com.github.hcsp;

import com.github.hcsp.pet1.Cat;

public class Home { Cat cat1; com.github.hcsp.pet2.Cat cat2; }

  1. - 包的主要通途就是防止命名冲突,可区分同名但不通的类
  2. <a name="zWRdH"></a>
  3. # 静态方法
  4. - 静态方法就是不和任何对象绑定的函数,例如psvm public static void main,这里的static指的就是静态
  5. - 函数的局部变量作用范围为包围其的**第一对花括号**,函数调用时**创建**,函数调用结束时**销毁,**每次都是全新的**副本**
  6. <a name="bbRyL"></a>
  7. # 静态变量
  8. - **静态成员变量(静态变量)**属于类的成员,会持续存在,存在于jvm中,独立于对象
  9. ```java
  10. public class Main{
  11. static int i;
  12. public static void main(String[] args){
  13. i = 1; // 类内访问
  14. a();
  15. }
  16. public static void a(){
  17. }
  18. }
  19. public class Cat{
  20. public Cat(){
  21. Main.i = 2; // 类外访问
  22. Main.a(); // 如果要使用a()必须使用静态导入
  23. }
  24. }

对象

  • 客观世界的对象,反映在计算机中,进行复制和表述,便于操作,更容易被人去理解和接受
  • 类近似一份说明书,创建对象实例需要new操作符调用构造方法,存于内存中
  • 如果一个类如果没有声明任何的constructor,编译器自动生成一个无参构造器
  • 可以在一个类中声明多个构造器
  • 现实世界的对象间的操作被抽象为方法

    1. public class Main(){
    2. public static void main(String[] args){
    3. Cat cat = new Cat();
    4. }
    5. }
    1. public static Cat {
    2. // 成员变量(不是静态成员变量,没有static)
    3. public String name;
    4. public Cat() { }
    5. public Cat(String name) {
    6. this.name = name;
    7. }
    8. public void meow() {
    9. System.out.println("喵,我是" + name + "长度" + name.legth()) // 不引起歧义可省略this
    10. }
    11. }

    实例变量(成员变量)instance

  • 没有static限定符,是和一个对象紧密绑定在一起的一个存储单元,必须通过一个对象的实例来访问

    实例方法(成员方法)

    对象及引用

  • 声明的对象均为引用reference(地址),所有的对象都是地址

  • jvm占用了一块内存用来存放地址
  • String是不可变对象
    1. public class Home{
    2. Cat cat;
    3. public static void main(String[] args) {
    4. Home home = new Home();
    5. Cat mimi = new Cat();
    6. mimi.name = "咪咪"; // 字符串也是对象
    7. home.cat = mimi;
    8. }
    9. }