java是一门面向对象的语言,那么和c语言的面向过程究竟有什么不同呢?
举一个栗子:你要装修房子。
c语言的话:1.铺好各种线路 2.你需要先把墙壁粉刷 3.铺上瓷砖
java: 你只需要找一个装修公司,他们就会帮你解决这些问题。
1.面向对象好处有哪些:
将复杂的问题简单化了
你从事务的执行者变成了指挥者
更贴近人的思维方式,更好思考问题
类是一类抽象的事物的描述 类名需要使用大驼峰式的书写方式
对象时用类创造出来的一个具体的事物 当new一个对象的时候,相应的在内存中就会开辟一块空间
public class Demo02 {
public static void main(String[] args) {
Car car = new Car();
car.sayHi();
}
}
class Car{
String name; //车名
String displacement; //排气量
String color; //颜色
public void startCar() {
System.out.println("开车");
}
public void stopCar() {
System.out.println("停车");
}
public void sayHi() {
System.out.println(name+""+color+""+displacement+"!");
}
}
上面这段代码中打印结果之所以是空 是因为没有对新创建的这个对象中的属性进行赋值,引用
类型的数据没有赋值,初始值显示为null
在同一个工程当中是可以有相同名字的类,但是需要在不同的包下面
在两个包下分别先创建了一个Person类
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();
}
运行的结果:
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;
p1.sayHi();
fun2(p1);
p1.sayHi();
}
在方法中基本数据类型的传递是将值传递过去 引用数据类型则是地址的传递
下面这个图中忽略了代码中基本类型传递
匿名函数指的是没有名字的对象
在方法传参数的时候使用,可以减少代码量
public static void main(String[] args) {
//创建两个perso对象
//将重复代码抽成一个方法
Person p1 =new Person();
setNameAndAge(p1, "王龙", 18);
Person p2 =new Person();
setNameAndAge(p2, "赵日天", 15);
//使用匿名对象 当方法参数
//好处:减少代码量
setNameAndAge(new Person(), "王境泽", 19);
//匿名对象也是对象 也可以赋值 调用成员方法
new Person().name="xin";
new Person().age = 30;
new Person().sayHi();
//只调用方法可以使用匿名对象,如果想对对象中的属性进行赋值,需要给对象起名字才能获取到对象
}
class Phone {
// java bean 规范(java 实体类创建出来的对象)
// 1.声明成员变量都需要私有化
// 2.给每一个成员变量提供set和get的方法
// 3.必须提供无参的构造方法
private String phoneName;
private String color;
// 对外开放访问方式
public void sayHi() {
System.out.println(phoneName + "" + color);
}
// 获取方法和设置方法
public String getPhoneName() {
return phoneName;
}
public String getColor() {
return color;
}
// 设置方法
public void setPhoneName(String phoneName) {
// 就近原则 关键字this 代表的是本类的对象
// this.成员变量 获取本类的成员变量
// this.成员变量 = "西八" ; 给本类的成员变量赋值
// this.成员方法 调用本类的成员方法
// 谁调用了这个方法谁就是this
this.phoneName = phoneName;
}
public void setColor(String color) {
this.color = 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 penName;
private String color;
/*
* 构造方法(无参)
*/
public Pen() {
// 初始化成员变量(给成员变量赋值)
this.penName = "圆珠笔";
this.color = "蓝色";
System.out.println("我是pen类的无参构造");
}
/*
* 有参构造方法(构造方法的重载) 在创建对象的时候给成员变量赋值
*/
public Pen(String penName, String color) {
this.penName = penName;
this.color = color;
System.out.println("我是有参的构造方法");
}
// 介绍自己的方法
public void sayHi() {
// 使用 this 可以区分 成员变量 和 局部变量
String penName = "铅笔";
System.out.println(this.penName + " " + this.color);
}
public void setPenName(String name) {
penName = name;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public String getPenName() {
return penName;
}