类与包
- 类是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; }
- 包的主要通途就是防止命名冲突,可区分同名但不通的类
<a name="zWRdH"></a>
# 静态方法
- 静态方法就是不和任何对象绑定的函数,例如psvm public static void main,这里的static指的就是静态
- 函数的局部变量作用范围为包围其的**第一对花括号**,函数调用时**创建**,函数调用结束时**销毁,**每次都是全新的**副本**
<a name="bbRyL"></a>
# 静态变量
- **静态成员变量(静态变量)**属于类的成员,会持续存在,存在于jvm中,独立于对象
```java
public class Main{
static int i;
public static void main(String[] args){
i = 1; // 类内访问
a();
}
public static void a(){
}
}
public class Cat{
public Cat(){
Main.i = 2; // 类外访问
Main.a(); // 如果要使用a()必须使用静态导入
}
}
对象
- 客观世界的对象,反映在计算机中,进行复制和表述,便于操作,更容易被人去理解和接受
- 类近似一份说明书,创建对象实例需要new操作符调用构造方法,存于内存中
- 如果一个类如果没有声明任何的constructor,编译器自动生成一个无参构造器
- 可以在一个类中声明多个构造器
现实世界的对象间的操作被抽象为方法
public class Main(){
public static void main(String[] args){
Cat cat = new Cat();
}
}
public static Cat {
// 成员变量(不是静态成员变量,没有static)
public String name;
public Cat() { }
public Cat(String name) {
this.name = name;
}
public void meow() {
System.out.println("喵,我是" + name + "长度" + name.legth()) // 不引起歧义可省略this
}
}
实例变量(成员变量)instance
没有static限定符,是和一个对象紧密绑定在一起的一个存储单元,必须通过一个对象的实例来访问
实例方法(成员方法)
对象及引用
声明的对象均为引用reference(地址),所有的对象都是地址
- jvm占用了一块内存用来存放地址
- String是不可变对象
public class Home{
Cat cat;
public static void main(String[] args) {
Home home = new Home();
Cat mimi = new Cat();
mimi.name = "咪咪"; // 字符串也是对象
home.cat = mimi;
}
}