面向对象和面向过程
面向过程是指一步一步地描述做事情的过程,强调的是事情的过程.
面向对象具体的是找到一个对象,然后让对象去做事情,强调的是这个对象.
面向对象是将复杂的问题简单化,将事情的执行者变成指挥者,并且面向对象的思想是比较符合人类思考问题的思想,这种思想又被称为懒人思想.
面向对象有三大特点:封装,继承,多态.
例如:我吃饭
面向过程的思想就是首先我先去买一些做饭的材料,然后做好饭,然后开始吃饭.
面对对象的思想就是我先去找一个会做饭的人,然后让这个人帮我去做饭.
类和对象
类是指一类抽象事物的集合,是来描述一类事物的.
对象是由类创建出来的具体的事物
类的创建形式: 系统关键字class 类名{ },要注意的是一个文件中只能有一个由关键字public class修饰的类,并且一个文件中可以有多个类,一个类一般会有成员变量和成员方法.
对象的创建形式: 类名 对象名称 = new 类名();
并且可以通过该对象调用类中的成员变量,方式是 对象名称.成员变量
创建一个student类 ,然后在main函数中创建一个该类的对象
public class StudentDemo {
public static void main(String[] args)
{
Student stu = new Student();//在main函数中创建的对象
}
class Student{ //创建的类
String name;//类中的成员变量
String gender;//类中的成员变量
public void sayHi()//类中的成员方法
{
System.out.println(name+"----"+gender);
}
}
例:创建一个person类,并声明两个person类对象,并分析一下,俩对象在内存中的表现
public class StudentDemo {
public static void main(String[] args)
{
Person p1 = new Person();//创建p1,并在内存中开辟了一片区域
p1.sayHi;
Person p2 = new Person();//创建了p2,并在内存中开辟了一篇区域
p2.sayHi;
}
class Person{ //创建的person类
String name; //类中的成员变量
String gender;//类中的成员变量
public void sayHi()//类中的成员方法
{
System.out.println(name+"----"+gender);
}
}
类中的局部变量和成员变量
局部变量和成员变量的区别
1.书写的位置不同:局部变量要卸载类的方法中或者方法的声明中,成员变量要写在类以内函数以外;
2.初始化不同的:局部变量是必须初始化的,成员变量是可以不初始化的,当然成员变量在类中声明的时候是可以先赋初值的;
3.内存存在的位置不同:局部变量是存在栈内存中的,成员变量时存在堆内存中的
4.生命周期不同:局部变量是随着函数的压栈而开始,随着函数的弹栈而结束,成员变量是随着对象的生成而开始,随着对象的回收而结束
public class Test01 {
public static void main(String[] args) {
Person p1 = new Person();
p1.sayHi();
}
}
class Person{
String name = "阿猫";//成员变量,这里可以给初始值
int age = 18;
public void sayHi()
{
String name = "张三";//局部变量name
System.out.println(name + "->" +age);
}
}
注意:这里结果输出的是: 张三->18,为什么会这样?这是因为就近原则,name在取值的时候,先找方法中名字为name的值,再去类中找,所以为了避免这种情况,我们要在name前面加上关键字this,保证name的值是成员变量中的值
System.out.println(this.name + "->" +age);
匿名对象
匿名对象就是指在初始化的时候并未命名的对象
new Person();//匿名对象
new Person().sayHi;//匿名对象调用person类中的方法
new Person().sayHi;//匿名对象调用person类中的方法
要注意的是,上面两个方法中的匿名对象并不是同一个对象,因为new关键字每走一次就会创建一篇内存区域.
面向对象中的封装
封装是指把属性和方法的具体实现给隐蔽起来,提供公开访问的方法
属性的私有化就是其中一种封装的表现形式
属性的私有化就是将成员变量通过系统关键字private的修饰,使外界无法访问到
class Person{
private String name = "阿猫";//将属性私有化
int age = 18;
public void sayHi()
{
System.out.println(this.name + "->" +age);
}
}
这样在类以外就无法访问到name了,但是如果我们想在类的外面访问并修改私有化的属性,就需要通过在类中写一些借口来进行修改了.
我们可以在类中写一个get 和set方法,来方便外界进行访问和修改
class Person{
private String name = "阿猫";
int age = 18;
public void sayHi()
{
System.out.println(this.name + "->" +age);
}
public String getName() //get方法来访问name
{
return name;
}
public void setName(String name)//set方法来修改name
{
this.name = name;//这里面this关键字是为了防止就近原则
}
}