一.
面向过程:我应该干什么 重在过程 事物的执行者
面向对象:重点在对象 我该找谁干什么 指挥者
面向对象的好处:
1.将复杂问题简单化
2.从事务的执行者转化为事务的指挥者
3.更贴近人的思维(懒人思维)
类和对象:
java中最基本的单位就是类
类:对抽象事物的描述(可理解为模板)
对象:用类创建出来的就是对象(具体的事物)
public static void main(String[] args) {
//创建一个学生类的对象
//类名 对象名 = 初值;
//成员变量会随对象一起进入堆中
//并且只要new一次就会在堆中开辟一块内存空间
//Student stu 对象的引用(保存的对象的地址)
Student stu = new Student();
//使用 对象名.属性名 进行赋值和取值
stu.name = "IT吴彦祖";
stu.age = 22;
stu.gender = "男";
//调用成员方法 对象名.方法名()
stu.eat();
stu.playGame();
//哪个对象调用该方法 打印的就是那个对象的属性
stu.sayHi();
}
eg:学生类:
class Student{
//属性(成员变量 实例变量)
//书写位置:类中方法外
//行为(方法 函数) 跟函数一样 就static先不写
//书写位置:类中
//思考 没有给成员变量初值 成员变量 有没有值?
String name;
int age;
String gender;
//成员方法/实例方法
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void playGame() {
System.out.println("打游戏");
}
public void sayHi() {
System.out.println("姓名"+ name );
System.out.println("性别"+ gender );
System.out.println("年龄"+ age );
}
}
二.
成员变量 和 局部变量
1.书写位置
成员变量:类中 方法外
局部变量:方法中或方法上(在方法上即参数部分的变量)
2.在内存中的表现
成员变量:堆内存中
局部变量:栈内存中
3.生命周期
成员变量:随着对象进入堆内存中创建 随着对象销毁而销毁
局部变量:随着方法的调用而入栈 随着方法的结束而销毁
4.作用域
成员变量:整个类中
局部变量:方法中
5.初始值
成员变量:和堆内存一样 默认初始值
局部变量:默认没有初始值 不给初值直接编译报错
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();
}
三.参数的类型
1.参数是基本数据类型
public static void fun1(int a) {
System.out.println(a);
a = 10;
}
2.参数是引用数据类型
要什么类型就给什么类型
public static void fun2(Person p) {
p.name = "Naruto";
}
在main函数中调用
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 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 = "Naruto";
p1.age = 16;
p1.sayHi();
Person p2 =new Person();
p2.name = "Sakura";
p2.age = 18;
p2.sayHi();
setNameAndAge(p2, "辰", 17);
//使用匿名对象 当方法参数
//好处:减少代码量 使用方便
setNameAndAge(new Person(), "haha", 20);
//匿名对象也是对象 也可以复制属性 调用成员方法
new Person().name = "xxx";
new Person().age = 30;
new Person().sayHi();
//只调用方法可以使用匿名对象
//测试方法时 可能会使用
new Person().fun();
}
五.封装
写方法就是封装的一种
相当于隐藏代码的实现和属性 不能随意修改
需要开放访问方式(方法) 获取 修改
好处:
1.提高代码的复用性
2.提高代码的安全性
关键字(权限修饰符):private
被private 修饰的属性 只能在本类中访问
//java bean对象(java 的实体类 创建出来的对象)
1.声明成员变量 都需要私有化
2.给每一个成员变量提供set 和 get方法
3.必须提供无参的构造方法
class Phone{
private String phoneName;
private String color;
//对外开放访问方式
//获取方法
//命名规范
//获取 get + 成员变量名(首字母大写)
//修改 set+ 成员变量名(首字母大写)
//标准写法 set方法是没有返回值的
public String getPhoneName() {
return phoneName;
}
//修改方法(设置方法)
public void setPhoneName(String phoneName) {
//关键字 this 代表的是本类的对象
//this.成员变量 获取本类的成员变量
//this.成员方法 调用本类的成员方法
this.phoneName = phoneName;
//谁调用了这个方法 谁就是this
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void sayHi() {
System.out.println(phoneName + "" + color);
}
}
六.构造方法
对对象的成员变量进行初始化
写法:
1.没有返回值类型的位置(连void都不用写)
2.构造方法方法名要与类名完全一致
创建一个pen类
类中的书写顺序:
1.成员变量
2.构造方法
3.成员方法
4.set/get方法
class Pen{
private String name;
private String 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可以区分成员变量和局部变量
System.out.println(this.name + " " + this.color);
}
//set/get 方法
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;
}
}
在main函数中创建一个pen对象
构造方法是系统帮你调的
只要创建对象 系统就会帮你调用构造方法
构造方法只会执行一遍
public static void main(String[] args) {
Pen p = new Pen();
p.sayHi();
//测试有参的构造方法
//你传参数系统就会去找你有参的构造方法调用
Pen p1 = new Pen("钢笔", "蓝色");
}
/*
* 类中写什么?
* 成员变量
* 无参构造方法
* 有参构造方法(有没有都可以)
* 成员方法
* set/get方法
*/