1.面向过程:实现功能时候,每一个步骤都要亲历亲为 处理细节
2.面向对象:不关心具体的步骤找一个已经有该功能的对象 来帮我做事儿
Arrrays.toString(array); 打印数组
3.面向对象思想的举例:
注意这里 只要是面向对象就有 封装 继承 多态
4.类与对象的关系
类:一类事物的模板,一组相关属性和行为的集合 抽象的 虚的
类-属性:事物的状态信息 是什么
类-方法:能做什么
对象:根据类创建的对象
5.类的定义
直接写在类里 成员变量 成员方法 (与普通方法相比 没有static)
6.对象的创建和使用
类不能直接使用,需要根据类创建对象才能使用
6.一个对象的内存图
6.1等号左边就是一个局部变量 对象名称其实就是一个变量名称 放在栈中
6.2new的东西都在堆中
6.3对于一个对象来说 他的成员方法在堆里保存的其实是一个地址值 ,指向了方法区
6.4成员变量直接在堆里找到
6.5成员方法先在堆里找到方法区中成员方法的地址值 成员方法根据地址值再进栈
6.6先入栈的在栈底 往上压
6.7call执行完 出栈 main方法露头再执行
7.两个对象的内存图
8.两个引用指向同一个对象
9.使用对象类型作为方法的参数
10.使用对象类型作为方法的返回值
11.成员变量 和局部变量的区别
注意:局部变量没有默认值 局部变量不可能在方法中直接写 int age;这种如果不赋值使用时会报错 但是成员变量可以 而且有默认值
12.面向对象的三大特性--封装性
12.1方法是一种封装 private关键字是封装
封装就是将一些细节信息可以隐藏起来 有一个加号 小减号可以展开 隐藏方法中的细节步骤信息
12.2private关键字
package method;
/*
问题描述:
定义person年龄时,无法阻止不合理的数值被设置进来
解决方法:使用private关键字将需要保护的成员变量进行修饰
一旦使用private关键字进行修饰 呢么本类当中仍然可以随意访问,
但是超出本类就不能直接访问了但是可以通过方式访问啊 间接方法getter setter 方法
getter setter格式必须是getxxx setxxx
getter不能有参数有返回值 setter必须参数
*/
public class Person {
String name;
private int number;
String gender;
public void show(){
System.out.println("我是"+name+","+number+"号了");
}
//为什么用getter setter 因为打括号里可以放条件代码的
public void setNumber(int num){
if (num<1000&&num>0){
number=num;
}else{
System.out.println("重新输入");
}
}
public int getNumber(){
return number;
}
}
package method;
public class Demo03Private {
public static void main(String[] args) {
Person person=new Person();
person.setNumber(24);
int number= person.getNumber();
System.out.println(number);
person.show();
}
}
13.练习private
注意看boolean类型 getter方法 是isXxx形式
14.this关键字
/* 当方法的局部变量和类的成员变量重名的时候,根据就近原则优先使用局部变量 如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名 通过谁调用的方法谁就是this this一定是写在方法里面的 比如下面代码中是person调用的sayHello 通过person调用方法 呢this就是person this.name就相当于person.name这不就是调用的成员变量嘛 */
15.构造方法:专门用来创建对象的方法
1.创建对象时候就是调用构造方法 new 类名称()就是调用构造方法 类名称就是构造方法名
2.构造方法没有返回值没有return 也不写返回值类型
3.如果没有写构造方法 系统会赠送一个无参数的构造方法
4.一旦编写了至少一个构造方法 编译器便不再赠送
5.构造方法可以重载 重载--方法名称相同,参数列表不同
6.构造方法也是方法 也会执行{}中的代码啊
package method;
public class Student {
private String name;
private int age;
public Student(){
System.out.println("无参构造方法执行了");
}
public Student(String name,int age){
this.name=name;
this.age=age;
System.out.println("有参构造方法执行了");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
注意看这里的打印输出
package method;
public class Demo05Student {
public static void main(String[] args) {
//全参构造
Student student=new Student("TT",20);
System.out.println("===============");
//无参构造
Student student1 = new Student();
System.out.println(student.getAge()+student.getName());//20TT
System.out.println(student1.getAge()+student1.getName());//0null 注意这里的打印输出
student1.setAge(12);
System.out.println(student1.getAge()+student1.getName());//12null
}
}
16.定义一个标准的类
16.1所有的成员变量加private关键字
16.2每一个成员变量都与getter setter方法
16.3一个无参构造 一个全参数构造