在src创建包 通过包对类管理 包的命名规范 1英文小写字母2域名倒序
对象的属性不初始化会出有默认值 整形是0
字符串为null
double是0.0
Cat one = new Cat();
完成了两个部分操作,声明对象 Cat one
实例化对象 new Cat()
声明对象:在栈空间开辟一片区域叫做one
这时候里面是空的,他还不是一个真正有效的对象 如果属性方法调用不允许
实例化就可以使用
把栈和堆关联起来 就是= 赋值负号
就是把堆的内存地址存放到one当中
在java当中每用一次new都在堆开辟了新的实例空间,哪怕是完全相同的
不过可以这样:Cat one = new Cat();
Cat two = one;
修改属性就一起修改了
单一职责原则(单一功能原则):一个类有且只有一个引起功能变化的原因
如果一个类承载的功能越多,他的交融耦合性越高,被服用性越低
构造方法:不能被对象直接调用
构造方法的方法名与类名相同并且没有返回值
也可以添加或不添加参数
只能在实例化中调用
当没有指定构造方法,系统自动添加无参数构造方法
public Cat(){}
不能有返回值类型
有构造方法就不会自动添加
一个类可有多个构造方法
就近原则:他会找同一个范围内的变量成员
这样是可以的但是不好
this关键字
this.name=name就可以了
this表示当前对象
如果创建一个方法和类名一样 设置返回值,也可以调用 语法没问题
但是并不推荐大家去写
另外构造方法不能再类内被别的方法调用
this();
来调用同一个类的无参数构造,不过必须方法体第一行
封装:将类当中的某些信息隐藏在类内部,不允许外部程序直接访问
通过该类提供的方法来实现对隐藏信息的操作和访问
隐藏对象信息
留出访问接口
特点:1只能通过规定的方法访问数据
2隐藏类的实例细节,方便修改和实现
Java实现封装:1 修改属性的可见性 设为private
2 创建getter/setter方法 设为public用于对象读写
3 在getter/setter方法中假如属性控制语句 对属性值的合法性进行判断
private String name;
public void setName(String name){
this.name = name;
}
public String getName(String name){
return this.name;
}
调用
Cat one = new Cat();
one.setName("凡凡");
one.getName
把属性改为私有
快捷生成get和set
找一个区域右键,sourse
生成get和set
只有set只写,只有get只读
也可以构造传参,用set方法
使用包进行类管理Java文件解决同名文件冲突
我们创建新的包
命名采用域名倒叙+模块+功能
域名全部小写
package语句必须放在程序代码第一行
尽量一个包只存在和包相关的信息
导入包:
package下面 package是定义包
import 加载的包名.* ( .*表示所有类)
import 加载的包名.类名
建议通过第二种效率高
第三种直接在代码中加载
包名.类名
haha.cat one = new haha.cat();
不能导入两个包的同名文件
要么就把一个包里换成*,不过还是出现指名的那个 和导入的位置无关
我们只能明确的通过 包.类来调用
不过通过父包是不行的,只能加载直接的类
static关键字
静态成员,类成员,所有实例化公用同一个空间
类对象共享
类加载产生,销毁时释放,生命周期长
类名.属性访问
加载方法前面就是类方法
对象名.方法
或者 类名.方法
推荐 类名.方法
不能加载类前面
可以再方法中定义局部变量,但不能加上static
成员方法中也可以访问静态成员
静态方法不能访问非静态方法,只能调用静态方法
静态方法中不能使用this
不过可以实例化后调用
{}代码块
方法里的{}普通代码块
顺序执行, 先出现先执行
在类当中定义就叫构造代码块
与位置无关
构造代码块在创建对象调用,优先于构造方法执行
可以有多个
如果在构造代码块前加上static
就变成静态代码块
静态代码块在类加载调用,优先于构造代码块执行
无论产生多少实例,静态代码块只执行一次
静态代码块只能给静态成员赋值
如果有些信息只希望他加载一次就在静态代码块
不同的{}产生不同作用空间
不同作用空间可以有同名变量
在作用空间外无法访问到作用空间内的
代码块里的变量,生命周期只在代码块里
实现继承:extends
子类可以访问父类非私有成员
可以在产生类的界面继承
找包:alt+shift+o
方法重载:同一个类中,名相同,参数列表不同,返回值,访问修饰不不限制
方法重写:子类重写父类,返回值类型,方法名,参数类型,顺序,个数和父类完全一致,访问修饰符允许有变化(需要大于等于父类访问范围)参数名无关
子类也可以定于与父类重名的属性
protected:跨包非子类不可以,同包任意可以访问
默认:同包子类非子类可以,跨包子类/非子类不可以调用
super关键字:
super.eat();
就是调用父类的eat方法
对父类的调用
父类的构造方法不允许被继承 不允许重写
访问修饰符不影响成员加载熟顺序,更书写位置有关
子类构造默认调用父类无参构造
super(参数)
访问带参的构造方法
必须放在子类构造方法第一行
this()和super()只能出现一个