面向对象02

1. 面向对象

1.1传值和传引用

a.基本数据类型 保存值的大小 , 引用数据类型保存内存地址
b.传值 基本类型传递
c.局部变量 属于栈帧私有化 栈帧独享

在这里插入图片描述

1.2区分成员和构造

  • 构造方法 :
  •  	[权限修饰符]  类名(参数) {方法体}
    
  • 作用 : 创建对象,初始化成员属性
  • 方法声明 : [修饰符列表] 返回值类型 方法名(参数) {方法体}
  • 方法名符合命名规则即可 : 字母,下划线,美元符号,数字,不能数字开头,不能使用关键字和保留字,建议望文知义, 驼峰命名法
  • 方法目的 : 代码重用性,提高代码效率
  • 问题
  •  1 成员方法的方法名可以和类名相同吗?(成员方法可以和构造方法同名吗?)
    
  •  		可以和类名相同
    
  •  2 如何区分同名的成员方法和构造方法?
    
  •  		看返回值,构造方法木有返回值,成员方法必须有返回值类型,如果没有用void表示
    

1.3this

1.3.1 this是什么

	this是每个对象中,保存自身内存地址的一个引用类型的成员变量
  •  		所以说,this就表示对象自己,相当于我们说 "我" 一样
    

1.3.2 能干什么

  •  this能干什么?
    
  •  		1 在成员/构造方法中,能够区分同名的局部变量和成员变量
    
  •  		2 在构造方法中,也可以用于重载调用当前类中其他的构造方法(必须在第一行)
    
  •  		3 return this 返回当前对象内存地址,可以做到链式调用
    

1.3.3 怎么用

注意: This不能出现在静态上下文中
在这里插入图片描述

1.3.3.1区分局部变量和成员变量

public class _01_This {

public static void main(String[] args) {
	_01_This s1 = new _01_This();
	s1.i=19;
	s1.m1();
}
int i = 1;

// 1 区分同名的局部变量和成员变量
public void m1() {
	// 成员方法中可以直接访问成员变量,因为俩在一起
	System.out.println(i);
	int i = 2;
	// 由于和成员变量同名,局部变量优先级高,所以直接访问i是局部变量
	System.out.println(i);
	
	// 通过对象区分 1 新建对象,访问的i是新建对象的i 并不是当前对象的i  
	 _01_This s = new _01_This();
	 System.out.println(s.i);
	 
	 // 使用当前对象调用,因为s1是main方法中的局部变量,不能访问
	// System.out.println(s1.i);
	 
	 // 使用this调用,因为this就表当前对象(谁调用的这个成员方法,this就是谁)
	System.out.println(this.i);
}

}

class User {
private int age;
// 成员方法中 区分
public void setAge(int age) {
this.age = age;
}

public int getAge() {
	return age;
}
// 构造方法中 区分
public User(int age){
	this.age = age;
}

}

1.3.3.1重载调用构造方法
  • this重载调用当前类的其他构造方法
  •   必须出现在构造方法第一行
    
  • 语法 :
  •  	this(参数);
    

在这里插入图片描述

1.3.3.3链式调用
  • 链式调用 : xxx.方法().方法().方法()…
  • 核心点 : 前者方法返回值一定是可以调用后者方法的 引用
    在这里插入图片描述

1.4static

1.4.1 是什么

static是一个修饰符关键字,用来区别静态和动态属性

1.4.2 能干什么

  • static修饰符
  •  1 static修饰的类体中的变量是静态变量
    
  •  2 static修饰的方法是静态方法
    
  •  3 static修饰的语句块是静态语句块
    

1.4.3怎么用

  • static修饰符
  • 1 static修饰的类体中的变量是静态变量
  • 2 static修饰的方法是静态方法
  • 3 static修饰的语句块是静态语句块
  • 语法 : static { java代码; }
  • 静态语句块是在类加载阶段执行,并且只执行一次,并且是从上往下执行
  • 静态变量也是在类加载阶段初始化,并且和静态语句块没有优先级之分,从上向下执行初/初始化,所以 不能再静态语句块中 提前使用静态变量,而在方法中是可以的
  • 什么情况下 类加载 : 访问某个类的静态属性的时候,类加载

其他重要知识点补充

一:
实例语句块
语法 : {
java代码;
}

  1. 实例语句块等同于成员方法,只是没有名字
    2.如果不实例化 实例语句块不执行,并且实例化几次,就执行几次
    3.执行顺序 : 静态语句块 > main方法 > 实例语句块(需要new对象 才会执行)

A不能使用类名调用成员属性
B 静态方法也可以使用对象调用,因为在编译阶段,就会把对象引用变量转换为对应的类名去调用

二:

变量分类 :
静态变量 : 类中使用static修饰
成员变量 : 类中非static修饰
局部变量 : 方法中声明的变量是局部变量,作用域让当前方法使用

初始化时机 :
静态变量 : 类加载阶段初始化
成员变量 : 创建对象的时候初始化(构造方法)

应用场景 :
静态变量 : 类级别的,是所有对象共享的,比如一个静态变量 age = 10 ,那么说明所有对象都有这个age属性,并且值都是18
所有对象共有的属性和值
成员变量 : 对象和对象之间有相同的属性,但是可能有不同的值,非对象共享

静态是对象共享数据,即使使用对象去访问,编译时也会转换为类名去访问

1.4.4应用场景

通常用于 类调用日志的记录

1.5封装

1.5.1 .1包机制

  • 目标 : 当前文件的编译和运行
  • 软件包机制 :
  •  1 为了解决类的命名冲突问题
    
  •  2 在java中使用package语句定义包
    
  •  3 package语句只能出现在java源文件中的第一行
    
  •  4 包命名通常采用公司域名倒叙
    
  •  5 package限制的是class文件的放置位置(编译之后,把class文件放到哪里去)
    
  •  com.tledu.oa.system
    
  •  	以上包命名可以体现出来 : 这个项目是天亮教育开发的OA项目,当前处于OA项目中的system模块
    
  •  6 完整的类名 是带有包名的
    
  •  7 带有包名的文件,编译应该是这样
    
  •  		javac -d 生成路径  java源文件路径
    
  •  		javac -d ./ -encoding utf-8 _01_Package.java
    
  •  8 运行
    
  •  	java 包名.类名
    
  • 什么是文件名 : 能够找到这个文件的全路径
    在这里插入图片描述

1.5.1.2 Import

在这里插入图片描述

// 导入单个类
//import _05_Package.com.B;
//import _05_Package.com.C;

import java.util.Date;

// 导入该包下所有类
import _05_Package.com.*;

// 导入该类中所有的静态属性(静态变量/静态方法),让当前类可以不加前缀,直接调用
import static _05_Package.com.B.*;
/**

  • import :
  •  1 引入其他需要的类
    
  •  2 只能出现在package语句执行,class语句之上
    
  •  3 java核心类不需要导入,可以直接用,其他都不行
    
  •  		java.lang
    
  • 语法 :
  •  import   包名.类名;   导入单个类
    
  •  import   包名.*;   导入该包下所有的类
    
  • 注意 : eclipse编程过程中,按空格的时候 会自动导包,如果程序没问题,但是报错,可以查看是不是包导错了
  • 导入该类中所有的静态属性(静态变量/静态方法),让当前类可以不加前缀,直接调用
  •  	import static _05_Package.com.B.*;
    
  •  	不建议这样使用,在当前类中,不容看出来,这个变量是谁的变量 
    

在这里插入图片描述

1.5.2 权限修饰符

  • private 私有化权限修饰符 ,除了自己(当前类)之外,都不能访问
  • public 公共的权限修饰符 , 谁都能访问
  • 不写权限修饰符的时候 : 要么当前类中使用,要么当前包中使用
  • protected 受保护的权限修饰符 , 要么同类,要么同包,要么有继承关系

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值