面向对象语法
1. 匿名对象
(1) 匿名对象的概念
(2) 匿名对象的用途
(3) 对象的生命周期
2. static关键字
(1) static关键字修饰符【类级别】【对象级别】
(2) static关键字可修饰内容
① 字段
② 普通方法
③ 类
1) 字段
2) 普通方法
3) 构造方法
(3) static修饰字段的效果
① 结论:staitc修饰的字段:被改类的所有对象共享:
② static修饰那些字段合适
1) 名字不合适
2) 共用的就合适 PI=3.14 地球的人口数量
3) 一般 public static final PI = 3.14 这种字段,常量字段
(4) static修饰方法的效果
① 工具方法,方便使用
(5) 类级别,对象级别
① 类和对象之分
1) 类:宽泛的指代一类事物:代表了类....
2) 对象:类中的一个具体的个体
② 代码区分【访问区分】
1) 静态字段,静态方法
a. 类名.去访问
2) 非静态的字段及方法
a. 对象名.去访问
③ 代码区分
1) 对象其实也可以访问静态字段
a. System.out.println(Student.name);
b. System.out.println(new Student().name);
c. 编译之后还是类名.字段名
2) 静态的字段,对象可以访问
a. 因为类的东西,每个对象都有.............
3) 非静态的字段,类名不可以访问
a. 对象的东西,不是其他人可以访问的
(6) 变量的分类详解【了解】
class Studnet{
static int age;//静态字段
String name;//普通字段
void add(){
int higth = 15;//局部变量
}
}
这些都变量:
成员变量
age: 类变量:通过类访问
name:实例变量【instance--对象】
局部变量
higth:局部变量
1. 分类详解:
称呼 位置 是否有static 生命周期(开始) 生命周期(结束)
类变量 类中 √ 类被加载的时候【放入JVM】 类被卸载的时候
实例变量 类中 创建对象的时候 对象被销毁
局部变量 方法内部[形参,代码块] 方法被调用的时候 方法调用完毕
理解:帮助理解以上内容
1. 类被加载的时候 : 把类的字节码class文件 加载到 JVM中;
2. 局部变量的作用 : 一般都是方法中,为了辅助方法完成功能而临时定义的变量;
1. 类变量 : 有static修饰的成员变量(字段);
2. 实例变量: 没有static修饰的成员变量(字段);
3. 以下的说法尽量少用(了解)
类成员 : 静态的字段和方法
实例成员:非静态的字段和方法
3. 包
(1) 概念
(2) 包的声明:为了管理将类放入到包
① package cn.itsourc.oa.domain;
1) class Student--编译之后字节码--放入domain
2) package cn;
3) class Person
② 注意事项
1) 声明必须放在类文件的最上面
2) 规范包名命名 都是小写
(3) 注意目前包的声明,导入,原生命令的方式去使用
1. 编译(请在命令提示符窗口中进行)
语法 : javac -d . 源文件名.java // 编译的时候不需要包的!
实例 : javac -d . Test.java
F:\>javac -d . Test.java
F:\>
2. 运行(请在命令提示符窗口中进行)
语法 : java 包名.子包名.类名
实例 : java cn.itsource.test.PackageDemo1
类的完全限定名 : 包名.子包名.类名
F:\>java cn.itsource.crm.oa.domain.Test
Hello 小姐姐你好呀
(4) 包的导入:为了从包里面包类拿出来使用
① import
4. 封装
(1) 概念:封装,安全保密,透气
(2) 封装通过权限来做
(3) 权限又是什么概念
(4) 权限修饰符给Java的东西,提供权限
① Java关键字,修饰符
② private < 默认不写 < protected < public
1) private : 私有的,除了自己,谁都不能用
2) public : 公共的,谁都可以用!
(5) 封装步骤
(6) 封装的注意事项
5. this关键字
1) 官方:this所在的函数,正在被谁调用this就指代谁
2) 民间 :this当前被对象持有,this就指代谁,模板---->复印件
使用场景
1. 解决局部变量和成员变量的二义性 --- get set 方法中的应用[在get/set可以写this]
2. 作为返回值返回 : this持有对象地址,表示该类的一个对象即是一个数据
3. 作为参数传递
本类中构造方法之间的相互调用
public class _14ThisDemo { /* this的用途 1.区分字段的二义性 2.this作为返回值 3.this也可以作为参数传递 4.this在一个类中,构造方法的第一句调用其他的构造方法 */ public static void main(String[] args){ Student stu = new Student(); System.out.println( stu); //调用returnStu() 返回了当前对象的地址值... System.out.println( stu.returnStu()); //Java代码链式写法 stu.add(10,20).add(18,54).add(17,49); stu = new Student("二狗",19); System.out.println(stu.getName()+"-------"+stu.getAge()); } } //设计代码 class Student{ private String name; private int age; //构造方法功能:创建对象,初始化name字段的值 Student(String name){ System.out.println("--------------------"); this.name = name; } //创建对象,并初始化name 及age的值! Student(String name,int age){ //this.name = name; this(name);//4 //new Student(name);//会诞生一个新的对象 this.age = age; } public void setName(String name){ this.name = name;//1 System.out.println("this:"+this); } public Student returnStu(){//【设计代码的时候】,this作为了返回值 return this;//2 } public Student add(int a,int b){//2 System.out.println(a+b); eat(this);//3 return this; } public void eat(Student stu){ System.out.println("如果使用了该方法,必须传入一个Student对象"); } public String getName(){ return name; } public void setAge(int a){ age = a; } public int getAge(){ return age; } Student(){ } }