面向对象概念

匿名对象以及对象的生命周期

匿名对象引入

class _05NiMinDuiXiang{
	public static void main(String[] args) {
		new Student().name = "老狗";
		System.out.println(new Student().name);//null
	}
}
class Student{
	String name;
	int age;
	void eat(){
		System.out.println("哈根达斯......");
	}
}

因为上面new了两次;在堆空间了创建了两个对象,值赋值给第一个对象;
这里的对象 new Student() 其实就是匿名对象;

什么是匿名对象

  • 匿名对象的概念:
    1.匿名对象,就是没有名字的对象[创建了一个对象而没有使用变量接收]
    2.该对象存在于堆总处于游离状态:没有任何变量持有引用地址,指向他
    3.但是匿名对象本质也是一个对象v

匿名对象使用场景

class _05NiMinDuiXiang{
	public static void main(String[] args) {
		new Student().eat();
	}
}
class Student{
	String name;
	int age;
	void eat(){
		System.out.println("哈根达斯......");
	}
}
  • 把匿名对象作为一个实际参数进行传递
class _05NiMinDuiXiang{
	public static void main(String[] args) {
		print(new Student());//匿名对象作为参数传递
	}
	static void print(Student stu){
		System.out.println("呆看我一调.....");
	}
}
class Student{
	String name;
	int age;
	void eat(){
		System.out.println("哈根达斯......");
	}
}
  • 对对象的生命周期的了解
    开始 : new Student() new的时候就开始了;
    结束
    [说法1,常见的说法] :当对象失去所有的引用
    [没有变量再指向它了(没有变量在存储它的地址)- 相当于失联了,我们无法再使用它了]
    结束
    [说法2] : 对象真正的被销毁[对象会在堆里面占用内存,当把对象的内存空间回收了]
    Java有自动垃圾回收机制;

static关键字 静态的 修饰符

  • static引入及修饰内容测试
    1.这是从第一次写hello的时候,就见过;
    2.static 是Java的一个关键字,也是一个修饰符;
    3.可以修饰什么和不可以修饰什么?
    4.目前java代码中存在的东西 分析static是修饰符:可以修饰的内容:及验证
    (1)可以修饰普通方法
    (2)可以修饰字段[ 成员字段 ]
    (3)可以修饰内部类[暂时不了解]
    (4)不可以修饰外部类
    (5)不可以修饰局部变量;
    (6)不可以构造方法

修饰方法:如何使用?

有static修饰的方法: 方法所在的 类名.方法名(…);

public static void main(String[] args) {
	Student.eat();
}
class Student{
	static void eat(){
		System.out.println("薯片");
	

没有static修饰的方法 : 方法所在的类的对象名.方法名(…);

public static void main(String[] args) {
	new Student().eat();
}
class Student{
	void eat(){
		System.out.println("薯片");
	}
}

static修饰字段有什么效果?

  • 在写一个字段的时候,是否应该加static —> 根据实际情况
  • 实际情况:设计一个学生类,其中有name-姓名 字段,是否应该加static 呢? —> 加与不加的效果
    验证使用static修饰字段之后的效果
    1.效果:加了static修饰的字段:该字段被该类所有对象共享:当一个对象修改了该字段,其他对象使用该字段,都是修改之后的值

static修饰方法有什么效果

  • 目的: 使用static修饰的方法调用方便
  • 常见的地方: 一般就是工具方法【关注方法本身的功能】,例如: Arrays中全部都是工具方法(static)
    最近面向对象语法,我们一般写的方法都写成非静态,除非非得使用static

static类级别的修饰符

  • static类级别的修饰符理解
    (1)static修饰的字段:应该通过类名.字段名访问
    (2)static修饰的字段:应该通过类名.方法,该字段被该类的所有对象共享对象级别
    (1)非static修饰的字段:对象名.字段名
    (2)非static修饰的字段及方法,当创建对象时候,独属于每一个对象,没有被该类的对象共享
Student stu1 = new Student();
stu1.name = "小花花";

Student stu2 = new Student();
stu2.name = "大花花";

静态上下文不予许访问非静态的变量及方法
非静态上下文可以访问静态上下文:

class Student{
	static String name;
	static void eat(){
		System.out.println("吃学习......");
	}
	int age;//对象级别
	void run(){//对象级别
		System.out.println("顺拐.......");

什么是包


  • package)是Java提供的一种区别类的名字空间的机制,是类的组织方式,是一组相关类和接口的集合,它提供了访问权限和命名的管理机制

包作用

  • 包命名规范:一般是 公司域名 反过来写 + 项目名+模块名字+子模块名
    例如 : itsource.cn 域名
    语法 : package cn.itsource.erp.oa.domain;
  • 注意:不要写错nc.
    上班之后 不要写错cn.itsource 按照公司规范写
  • 规范及实际书写注意事项规定
    1.规范
    a)自己一定需要有规范命名的意识,具体怎么写以公司标准为准;
    b)包名中应该全部都是英文,并且是小写的

包的导入

包的导入(其实本质是导入包中的类到本类中,确保本类中可以正确的使用到指定的类型)
1.在一个类中需要使用到其它的包中的类,可以先导入在便捷的使用
2.目的: 是为了正确的引用到指定的类型
3.注意: 导入包的代码应该在声明包的后面,声明类的前面

  • 导入的语法 :
    1)import 包名.子包名.类名;
    2)import 包名.子包名.*;//*通配符,通配该类所在的子包名
    3)通一个类中用到了java.util.Date java.sql.Date 导入会区别不了二异,所以通过完全限定名的方式使用
    4)java.lang这是Java规定的核心包,使用的时候会自动导入,所以不用手动导入

封装

  • 封装概念
    通过封装的操作,可以达到从物理层面控制访问(外面不能轻易访问到里面内容–》这个就是物理层面)

Java中的封装如何体现

  • 如何控制程序中的访问 ?
    通过给类中的成员(字段,方法,构造方法)添加访问权限来实现访问控制
  • 什么是访问权限:
    例子:比如做一个系统,不同人登录进去,的访问权限不一样;
  • 访问权限修饰符: private < 默认不写(注意不要添加default修饰)< protected < public
    private :最小权限,被它修饰的成员只能够在本类中可以访问到;
    public :最大权限,任何地方和任何人都能访问;
  • 为什么需要将字段私有化起来: 安全

封装的步骤

1.上面的代码把name age 私有化 [提供private 修饰 ]之后就不能够操作了,
2.怎么去赋值和取值呢?提供setget方法
3.提供一个无参数的构造方法:标准的javaBean

/*
	设计方法存值取值
		public  需要,给别人访问的
		static  不需要:修饰方法,字段也需要静态修饰,静态修饰的字段被该类的所有对象共享
		返回值:存值void 不需要返回值,取值对应字段类型
		方法名字:存值setName    取值getName : 特殊情况 布尔类型的字段get 变 is
		参数:存值对应字段类型,取值不需要参数
*/
class Student{
	private String name;
	private int age;
	private boolean sex;
	public void setName(String n){
		name = n;
	}
	public String getName(){
		return name;
	}
	public void setAge(int a){
		age = a;
	}
	public int getAge(){
		return age;
	}
	public void setSex(boolean s){
		sex = s;
	}
	public boolean isSex(){
		return sex;
	}
}

封装小结

  • 在Java 中的体现及步骤
    1)把类中的字段私有化;
    2)给每一个字段都提供一组getter setter方法 (方法的规范写法);setXxx
    在测试类中尝试创建对象,并通过调用getter setter方法完成 对字段的赋值和取值;
    3)提供一个无参数的构造方法
  • 能否把一个字段的get 和set方法写成一个方法
    i.不可取(比如 当我只是取值的时候,还需要传入参数,这不好)
  • 一个类中的多个字段的赋值方法 写成一个方法
    i.不可取 耦合度太高(万一我们只想给某一个字段赋值)
  • 单一职能原则:功能最小化,不要想着一个方法写完所有的功能
  • JavaBean
    1)字段必须私有化
    2)给每一个字段提供合理的getter setter方法
    必须有一个公共的无参数的构造方法;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值