实例化对象就是一个创建对象的过程。
首先建立一个class为Cat的对象:
package com.imooc.animal;
public class Cat {
//属性:昵称,年龄,体重,品种
String name; //String类型默认值null
int month; //int类型默认值0
double weight; //double类型默认值0.0
String species;
//成员方法:跑动,吃东西
//跑动的方法
public void run() {
System.out.println("小猫快跑");
}
public void run(String name) {
System.out.println(name + "快跑");
}
//吃东西的方法
public void eat() {
System.out.println("小猫吃鱼");
}
}
再建立一个class为CatTest的对象:
package com.imooc.animal;
public class CatTest {
public static void main(String[] args) {
//对象实例化
Cat one = new Cat();
//测试
one.eat();
one.run();
one.name = "花花";
one.month = 2;
one.weight = 1000;
one.species = "英国短毛猫";
System.out.println(one.month);
//默认存在初始值,和在方法里定义的局部变量没有初始值不同
System.out.println("昵称:"+one.name);
System.out.println("年龄:"+one.month);
System.out.println("体重:"+one.weight);
System.out.println("品种:"+one.species);
one.run(one.name);
}
}
可以看到,在Cat里定义了两个run的方法,后者如果用name调用的时候,可以直接变为“花花快跑”。
一个类里有且只有一个引起功能变化的原因。
如果在一个类当中承担的功能越多,交融耦合性越高,复用越低
实例化对象的过程可以分为两部分
–声明对象 Cat one
在栈里开辟一个空盒子 one, 但是不能像一个真正的对象一样使用。必须要经过第二步↓。
–实例化对象 new Cat();
在堆空间里开辟一个空间,完成了操作。
Cat one = new Cat();
将栈空间和堆空间连接起来。
这样的操作结果会打印出来都是凡凡。
构造方法与类同名且没有返回值
语句格式:
只能在对象实例化的时候调用
当没有指定构造方法时,系统会自动添加无参的构造方法
当有指定构造方法时,无论是有参,无参的构造方法,
都不会自动添加无参的构造方法
一个类中可以有多个构造方法
将类的某些信息隐藏在类内部,不允许外部程序直接访问
通过该类提供的方法来实现对隐藏信息的操作和访问
隐藏对象的信息
留出访问的接口
1.只能通过规定的方法访问数据
2.隐藏类的实例细节,方便修改的实现
修改属性的可见性—设为private
创建getter/setter方法—设为public用于属性的读写(对外开放的可操作接口)
在getter/setter方法中加入属性控制语句—对属性值的合法性进行判断
private
public
只有getXXX方法的属性是只读属性
只有setXXX方法的属性是只写属性(只能赋值,无法获取)
Java中一个包里不能存在同名类
包的名称设置习惯:域名倒叙+模块+功能
建议采用"import 包名.类名;"的方式加载,提高效率
加载类的顺序跟import导入语句的位置无关
"import 包名.*;"只能访问指定包名下的类,无法访问子包下的类
语法:
package 包名;
注意:
1.必须放在Java源文件中的第一行
2.一个Java源文件中只能有一个package语句
3.包名全部英文小写
4.命名方式:域名倒序+模块+功能
语法:
import 包名.类名;
例:
导入包中全部类:
import com.imooc.*;
导入包中指定类:
import com.imooc.animal.Cat;
java.lang 系统默认导入
java.util 包含Scanner,Random
java.io 包含输入,输出功能相关的类,File,InputStream