1.什么是面向对象
面向过程:我应该干什么 重在过程 事务执行者
* 挑选一个电脑(台式)
* 1.挑一个cpu Intel Core i7
* 2.挑一个主板 华硕
* 3.挑一个显卡 七彩虹 影驰 9600GT
* 4.挑一个显示器
面向对象:重点在对象 我该找谁干什么 指挥者
* 找一个懂电脑的人 帮你去买电脑
* 更贴近人的思维(懒人思维)
2.面向对象的好处
面向对象的好处:
* 1.把复杂的问题 简单化
* 2.从事务的执行者 转化为 指挥者
* 3.更贴近人的思维(懒人思想)
3.类与对象
类和对象
* java中 最基本的单位 就是类
* 类:对抽象事物的描述(模板)
* 对象:用类创建出来的就是对象(具体的事物)
4.成员变量与局部变量的区别
成员变量 和 局部变量 区别
1.在类中位置不同:成员变量:在类中方法外。局部变量:在方法定义中或者方法声明上。
2.在内存中的位置不同:成员变量:在堆内存。 局部变量:在栈内存。
3.生命周期不同:成员变量:随着对象的创建而存在,随着对象的消失而消失。 局部变量:随着方法的调用而入栈,随着方法的调用完毕而消失。
4.作用域 : 成员变量:整个类. 局部变量:方法中.
5.初始化值不同:成员变量:跟堆内存中,有默认值初始化。局部变量:没有默认值初始化,必须定义,赋值,然后才能使用。
6.注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
5.创建不同包下的同名类
package com.lanou3g;
import com.lanou4g.Test;
public class Demo03 {
public static void main(String[] args) {
//创建一个Person对象
Person p1 = new Person();
p1.fun();
//创建不同包下的同名类对象
//需要指定完整的包名来创建对象
//一般情况下:不建议写同名类
com.lanou4g.Person p2 = new com.lanou4g.Person();
p2.fun();
//创建不包不同名的类
Test test = new Test();
}
}
6.参数是引用数据类型和数据是引用数据类型
public class Demo04 {
//参数是基本数据类型
public static void fun1(int a) {
System.out.println(a);
a = 10;
}
//参数是引用数据类型
//要什么类型 就给什么类型
public static void fun2(Person p) {
p.name = "刘斌";
p.age = 24;
}
public static void main(String[] args) {
int a = 100;
fun1(a);
System.out.println(a);
Person p1 = new Person();
p1.name = "凡鹏";
p1.age = 28;
fun2(p1);
p1.sayHi();//打印的是刘斌 24.因为进行的是地址的传递
}
}
不多说 上图!!!
不比比 再来一张
7.匿名对象
匿名对象:没有名字的对象
* 1.在方法传参数时使用
* 2.只调用一下方法(不赋值的情况下)
public static void setNameAndAge(Person p, String name, int age) {
p.name = name;
p.age = age;
p.sayHi();
}
public static void main(String[] args) {
// 创建两个对象 并赋值
// 将重复代码抽成一个方法
Person p1 = new Person();
p1.name = "wanglong";
p1.age = 16;
p1.sayHi();
Person p2 = new Person();
setNameAndAge(p2, "menglomg", 18);
//使用匿名对象 当方法参数
//好处:减少代码量
setNameAndAge(new Person(), "kun", 20);
//匿名对象 也是对象 也可以赋值属性 调用成员方法
new Person().name = "xin";
new Person().age = 30;
new Person().sayHi();//打印结果是 null 0. 因为开辟的是三块区域
//只调用方法可以使用匿名对象
//测试方法的时候可能会使用
new Person().fun();
}
8.封装
封装
* 写方法就是封装的一种
* 隐藏代码的实现和属性 不能随意修改
* 需要开发访问方式(方法) 获取 修改
* 好处:
* 1.提高代码的复用性
* 2.提高代码的安全性
私有的(权限修饰符)
* private 私有的
* 被private 修饰的属性 只能本类中访问
9.构造方法
构造方法:对对象的成员变量进行初始化
* 写法:
* 1.没有返回值类型(连void都不用写)
*2.构造方法方法名 要与 类名 完全一致
//创建一个pen对象
//构造方法 是系统帮你调用
//只要你创建对象 系统就会帮你调用构造方法
//构造方法只会执行一遍
Pen pen = new Pen();
pen.sayHi();
//测试有参的构造方法
//当你传参数 系统就会去找你有参的构造方法调用
Pen p1 = new Pen("钢笔", "绿色");
p1.sayHi();
10.创建一个标准的java bean 类
类中写什么?
* 成员变量
* 无参构造方法
* 有参构造方法
* 成员方法
* set/get方法
11.一个标准的Book类示范
public class Homework {
public static void main(String[] args) {
Book book = new Book();
Book book2 = new Book("少年阿宾", 25);
book.setName("平凡的世界");
System.out.println("我是成员方法,这本书的名字是:"+book.getName());
}
}
class Book{
private String name;
private int price;
Book(){
this.name = "小王子";
this.price = 95;
System.out.println("我是Book类的无参构造方法,我的书名是:"+name+",我的价格是:"+price);
}
Book(String name,int price){
this.name = name;
this.price = price;
System.out.println("我是Book类的有参数构造方法,我的名字是:"+name+",我的价格是"+price);
}
public void read(){
System.out.println("我是成员方法,这本书的名字是:"+name);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}