面向对象
面向过程:我应该干什么 重在过程 事务执行者
挑选一个电脑(台式)
1.挑一个CPU
2.挑一个主板
3.挑一个显卡
4.挑一个显示器
面向对象:重点在对象 我该找谁干什么 指挥者
找一个懂电脑的人 帮你去买电脑
面向对象的好处:
1.将复杂问题 简单化
2.从事务的执行者 转化为 事务的指挥者
3.更贴近人的思维
类和对象
java中 最基本的单位 就是类
类:对抽象事物的描述
对象:用类创建出来的就是对象(具体的事物)
public class Demo01 {
public static void main(String[] args) {
//创建一个学生类的对象
//类名 对象名=初值;
//成员变量会随对象一起进入堆中
//new 一次 就在堆中 开辟一块内存空间
//Student student 对象的引用(保存的对象的地址)
Student stu =new Student();
Student stu1= stu;
//使用 对象名,属性名 进行赋值和取值
stu.name="张三";
stu.age=22;
stu.gender="男";
//调用成员方法 对象名.方法名()
stu.eat();
stu.playGame("刺激战场");
//那个对象调用该方法 打印的就是那个对象 属性
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 playGame(String game) {
System.out.println("打"+game);
}
//介绍自己的方法
public void sayHi() {
System.out.println("姓名"+name);
System.out.println("年龄"+age);
System.out.println("性别"+gender);
}
}
成员变量和局部变量的区别
1.书写位置
成员变量:类中 方法外
局部变量:方法中或方法上
2.在内存中表现
成员变量:堆内存中
局部变量:栈内存中
3.生命周期
成员变量:随着对象进入堆内存中创建 随着对象销毁而销毁
局部变量:随着方法的调用而入栈 随着方法的结束而销毁0
4.作用域
成员变量:整个类中
局部变量:方法中
5.初始值
成员变量:跟堆内存一样 默认初始值
局部变量:默认没有初值 不给初值 编译报错
class Car{
//声明成员变量的时候可以给初值
String name;//车名
String displacement;//排气量
String color;//颜色
public void startCar(int a) {
//在方法中的变量 是局部变量
//在方法上的变量 是局部变量
int num=10;
//就近原则
String color="绿色";
System.out.println(color);
System.out.println("开车");
}
public void sayHi() {
System.out.println(name+""+displacement+""+color);
}
}
参数引用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();
}
}
匿名对象
匿名对象:没有名字的对象
1.在方法传参数的时候使用
2.只调用一下方法(不赋值的情况下)
public class Demo05 {
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对象 并赋值
//将重复代码 抽成一个方法
Person p1=new Person();
p1.name="wanglong";
p1.age=16;
p1.sayHi();
Person p2=new Person();
setNameAndAge(p2, "menglong", 8);
//使用匿名对象 当方法参数
//好处:减少代码量 使用方便
setNameAndAge(new Person(),"kun",20);
// 匿名对象 也是对象 也可以赋值属性 调用成员方法
new Person().name="xin";
new Person().age=30;
new Person().sayHi();
//只调用方法可以使用匿名对象
//测试方法时 可能会使用
new Person().fun();
}
}
public class Person {
String name;
int age;
//介绍自己的方法
public void sayHi() {
System.out.println(name+" "+age);
}
public void fun() {
System.out.println("我是3g包下的fun方法");
}
}
封装
写方法就是封装一种
相当于隐藏代码的实现和属性 不能随意修改
需要开放访问方式(方法) 获取 修改
好处:
1.增加代码的复用性
2.提高代码的安全性
关键字(权限修饰符)
private 私有的
被private修饰的属性 只能本类中访问
public class Demo06 {
public static void main(String[] args) {
Phone phone=new Phone();
//测试set get方法
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;
String color;
//对外开放 访问方式
//获取方法
public String getPhoneName() {
return phoneName;
}
//修改方法(设置方法)
public void setPhoneName(String phoneName) {
this.phoneName=phoneName;
}
public String getColor() {
return color;
}
public void setColor(String color) {
//就近原则
//关键字 this 代表的是 本类的对象
//this.成员变量 获取 本类 的成员变量
//this.成员变量="哈哈";给本类的成员变量赋值
//this.成员方法 调用本类的成员方法
//谁调用了这个方法 谁就是this
this.color=color;
}
public void sayHi() {
System.out.println(phoneName+""+color);
}
}
构造方法
构造方法:对 对象的成员变量 进行初始化
关键字 返回值类型 方法名(参数列表){
代码
}
public class Demo07 {
public static void main(String[] args) {
//创建一个pen对象
//构造方法 是系统帮你调的
//只要你创建对象 系统就会帮你调用构造方法
//构造方法 只会执行一遍
Pen p=new Pen();
p.sayHi();
//测试有参的构造方法
//你传参数 系统就会去找你有参的构造方法调用
Pen p1=new Pen("钢笔", "绿色");
p1.sayHi();
}
}
class Pen{
//类中的书写顺序
//1.成员变量
//2.构造方法
//3.成员方法
//4.set/get方法
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color=color;
}
构造方法(无参)
public Pen() {
//初始化成员变量(给成员变量赋值)
this.name="圆珠笔";
this.color="绿色";
System.out.println("我是pen类的无参构造方法");
}
//有参的构造方法(构造方法的重载)
//为了在创建对象的同时给成员变量赋值
public Pen(String name,String color) {
this.name=name;
this.color=color;
System.out.println("我是有参的构造方法");
}
//介绍自己的方法
public void sayHi() {
//使用this 可以区分成员变量和局部变量
String name ="aaa";
System.out.println(this.name+" "+this.color);
}
}