1.面向对象
面向过程:我应该干什么 重在过程
* 挑选一个电脑(台式)
* 1.挑一个CPU
* 2.挑一个主板
* 3.挑一个显卡
* 4.挑一个显示器
面向对象:重点在对象 我该找谁什么 事务的执行者 指挥者
* 找一个懂电脑的人 帮你去选购
* 更贴近任的思维(懒人思维)
* 想挣钱-->干it-->学it-->找培训机构-->找到了王龙(会扯犊子)
* 成为一个老板(面向对象思维)
* 员工:找一个会炸鸡排的
* 市场:帮我做宣传
* 收银:帮我收钱
* 秘书:有事给秘书
2.面向对象的好处
* 1.将复杂的问题 简单化
* 2.从事务的执行者 转换为 事务的指挥者
* 3.更贴近人的思维(懒人思维)
* 类和对象
* java中 最基本的单位 就是类
* 类:一类抽象事物的描述(模板)
* 对象:用类创建出来的就是对象(具体的事物)
*
* 车图纸(模板)
* 名字
* 咕噜数
* 排气量
* 颜色
*
* 车
* 奥迪 R8
* 4个轮子
* 5.0T
* 红的
![](https://i-blog.csdnimg.cn/blog_migrate/8170938a2e8afd4e7873e51185edd87a.png)
public static void main(String[] args) {
//创建一个学生类的对象
//类名 对象名 = 初值;
//成员变量会随对象一起进入堆中
//new 一次 就在堆中开辟一块内存空间
//student stu 对象的引用(保存的对象的地址)
Student stu = new Student();
Student stu1 = stu;
//使用 对象名.属性名 进行赋值和取值
// stu.name="it彭于晏";
// stu.name= "城管希";
// stu.age = 22;
// stu.gender = "男";
//调用成员方法 对象名.方法名();
stu.eat();
stu.play("刺激战场");
//那个对象调用的该方法 打印的就是哪个对象 属性
stu.sayHi();
}
/*
* 学生类
* 属性:姓名 年龄 性别
* 吃饭
* 睡觉
* 打游戏
*/
class Student {
// 属性(成员变量 实例变量)
// 书写位置:类中 方法外
// 行为(方法)跟函数一样 就static先不写
// 书写位置:类中
String name;
int age;
String gender;
//成员方法/实例方法
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void play(String game) {
System.out.println("打游戏"+game);
}
//介绍自己的方法
public void sayHi() {
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
System.out.println("性别:"+gender);
}
}
//创建person对象
Person p1 = new Person();
p1.fun();
//创建不同包下的同名类对象
//需要指定完整的包名来创建对象
//一般情况下 不建议写同名类 书写麻烦
com.lanou4g.Person p2 = new com.lanou4g.Person();
p2.fun();
//创建不同包下的不同名类
Test test = new Test();
// 参数是基本数据类型
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();
}
* 匿名对象:没有名字的对象
* 1.在方法传参数的时候使用
* 2.只调用一下方法(不赋值的情况下)
// 创建两个person对象 并赋值
// 将重复代码 抽成一个方法
Person p1 = new Person();
p1.name = "anglong";
p1.age = 16;
p1.sayHi();
Person p2 = new Person();
setNameAndAge(p2, "menglong", 8);
//使用匿名对象 当方法参数
//好处:减少代码量 使用方便
setNameAndAge(new Person(), "坤", 20);
//匿名对象也是对象 也可以赋值 调用成员方法
new Person().name = "xin";
new Person().age = 30;
new Person().sayHi();
//只调用方法可以使用匿名对象
//测试方法时 可能会使用
new Person().fun();
* 封装
* 写方法就是封装的一种
* 相当于隐藏代码的实现和属性 不能随意修改
* 需要开放访问的方式(方法) 获取 修改
* 好处:
* 1.增加代码的复用性
* 2.提高代码的安全性
*
* 关键字(权限修饰符)
* private 私有的
* 被private 修饰的属性 只能本类中访问
public static void main(String[] args) {
Phone phone = new Phone();
phone.setPhoneName("vivo");
phone.setColor("红色");
System.out.println(phone.getPhoneName());
System.out.println(phone.getColor());
phone.sayHi();
}
class Phone{
//java bean 规范(java 实体类创建出来的对象)
//1.声明成员变量 都需要 私有化
//2.给每个成员变量提供 set/get方法
//3.必须提供 无参的构造方法
private String phoneName;
private String color;
//对外开放 访问方式
//获取方法
public String getPhoneName(){
return phoneName;
}
//修改方法(设置方法)
public void setPhoneName(String phoneName){
//就近原则
//关键字 this 代表的是 本类的对象
//this.成员变量 获取本类的 成员变量
//this.成员变量 = "哈哈";给本类的成员变量赋值
//this.成员方法 调用本类的成员方法
//谁调用了这个方法 谁就是this
this.phoneName = phoneName;
}
//命名规范
//获取 get+ 成员变量名(首字母大写)
//修改 set+ 成员变量名(首字母大写)
public String getColor() {
return color;
}
public void setColor(String color){
this.color = color;
}
public void sayHi() {
System.out.println(phoneName+" "+color);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/84aa36942cd1cd2666529d94acd1c48a.png)
* 成员变量 和 局部变量区别
* 1.在类中位置不同:
* 成员变量:在类中方法外
* 局部变量:在方法定义中或者方法声明上
* 2.在内存中的位置不同:
* 成员变量:在堆内存
* 局部变量:在栈内存
* 3.生命周期
* 成员变量:随着对象的创建而存在,随着对象的消失而消失
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* 4.作用域
* 成员变量:整个类中
* 局部变量:方法中
* 5.初始值
* 成员变量:跟堆内存一样 默认初始值
* 局部变量:默认没有初值 不给初值 编译报错