一.面向过程
注意:一个.java文件中,可以创建多个不同的类,但是使用public修饰的(公共)类,只能有一个,
且这个用public(公共类)修饰的类必须和.java文件的文件名保持一致
面向过程 强调的是过程, 以及过程的执行者
例如:我要去买一台电脑,那么我就要把我的需求列出来:
1.什么牌子的
2.内存要多少
2.显卡怎样的
......
这些列项是过程,而我是执行者.
二.面向对象
1. 强调的是对象, 对象干什么
由执行者 变成了 指挥者
上述的例子就可以改成这样:找一个懂电脑的,我有什么需求都可以告诉他,由他来完成
2.面向对象的好处:
1.更贴近人的思维(懒人思维)
2.将复杂的问题简单化
3.从事物的执行者转变为事物的指挥者
* 3.类和对象*
Java中最基本的单位是:类
类:对抽象事物的描述(模板)
对象:对抽象事物的具体描述(利用类创造出来的具体事物)
属性(成员变量 实例变量) 用名词来描述
行为((成员)方法 函数) 用动词来描述
代码实例:
public class Kll {
public static void main(String[] args) {
//创建一个学生对象
//类名 对象名 = 初值
//new 是会在堆内存中开辟一块空间:保存的是成员变量
//成员方法和函数一样会进栈执行
//等号前的叫对象的引用(保存对象地址) ,等号后边的才是创建堆内存
Student stu1 = new Student();
//为对象的成员变量赋值
//对象名.属性名 = 值
stu1.name = "蕾";
stu1.age = 24;
stu1.gender = "女";
//取值
System.out.println(stu1.name);
System.out.println(stu1.age);
System.out.println(stu1.gender );
//调用成员方法
//对象名.方法名(参数);
stu1.sleep();
stu1.playGame("吃鸡");
stu1.eat();
//两个引用 指向同一个对象(堆内存地址)
Student stu2 = stu1;
stu2.name = "坡";
}
}
/*创建
* 学生类(关键词 class)
* 属性:姓名 年龄 性别
* 行为:
* 吃饭
* 睡觉
* 打游戏
*/
class Student {
//成员变量(属性):类中方法外
String name;
int age;
String gender;
//成员方法(行为 方法)
//先不写 static ,其他和函数声明一样
//吃饭
public void eat() {
System.out.println("吃饭");
}
//睡觉
public void sleep() {
System.out.println("睡觉");
}
//打游戏
public void playGame(String gameName) {
System.out.println("打"+gameName+"游戏");
}
}
代码在系统内存运行的部分过程如图:
//堆内存中地址是自己随意写的,不是真实地址
三. 封装
1.面向对象的特征:封装 继承 多态
2.封装:
1.方法本生就是一种封装
2.将代码的实现或者属性隐藏起来,不让外界直接访问,对外提供访问的方法(间接访问)
关键词 private(私有)被private修饰的成员变量,只能被本类进行访问
3.JavaBean(实体化)规范
1.成员变量私有化
2.提供set/get方法(暂时先用这个方法,后期还有其他方法)
4.代码实例:
public class Kll {
public static void main(String[] args) {
Phone ph1 = new Phone();
//ph1.name = "米5X";
//ph1.color = "金色";
ph1.setName("米5X");
ph1.getName();
ph1.setColor("金色");
ph1.getColor();
ph1.sayHi();
}
}
class Phone{
//成员变量私有化
private String name;
private String color;
//私有化之后,需要提供对外的访问方法
//每一个成员变量需要提供一对访问方法 赋值(set方法) 和 取值(get方法)
//命名规范 set+成员变量名() 使用的是小驼峰
//name的set方法
public void setName(String name) {
//就近原则
//name = name 最终成员变量的name被调用赋值时也还是为空
//解决方法
//使用关键字 this
//this.name 表示 本类中的name属性
//谁调用了这个方法, 这个对象就是this
this.name = name;
}
//name的get方法
public String getName() {
return name;
}
//color的set方法 道理同name的set方法
public void setColor(String color) {
this.color = color;
}
//color的get方法
public String getColor() {
return color;
}
public void sayHi() {
System.out.println("名字是:"+name+"\t颜色是:"+color);
}
}
5.对象作为方法的参数
匿名对象(没有名字的对象)
1.省略代码
2.一般可以当做传递的参数来使用
代码实例:
public class Demo05 {
//函数 修改对象name 参数 对象 姓名
public static void fun1(Person person, String name) {
person.name = name;
}
public static void main(String[] args) {
Person p = new Person();
String name1 = "ling";
p.name = "lei";
p.age = 24;
p.sayHi();
fun1(p, name1);
p.sayHi();
//创建匿名对象
//new 开辟了三个空间 ,他们之间无关联
new Person().name = "敲代码";
new Person().age = 23;
new Person().sayHi();
//可以当做参数 减少代码
//测试方法时使用
new Person().sayHi();
}
}