1.思想:

  面向过程的思想:遇到问题时想,我该如何做,然后分步骤实现;

  面向对象的思想:遇到问题时想,我该派谁去做这件事,至于他怎么做,与我无关,我只要最后的结果。

  

  实际举例:我们要组装一台电脑;

  面向过程:我们要去网上看各种硬件参数性价比,去商城询问价钱,然后挑选出来最合适的,买各种配件自己组装;

  面向对象:找一个懂电脑的专家,然后告诉他我们要一台电脑,他组装好给我。

2.面向对象的好处:

  1.更符合人们的思考习惯;

  2.面向对象更像一个指挥者,而面向过程是执行者;

  3.面向对象的思维方式可以将复杂的问题简单化;

  4.万物皆对象。

  

  举例:用类来描述汽车

  定义汽车类:

public class Car {//定义一个汽车类
String color;//定义颜色的属性
int count;//定义车轮数的属性
public void run(){//定义跑的方法
System.out.println(color+"的"+count+"轮车在跑");
}
}

  运行汽车:

public class Test1 {
public static void main(String[] args) {
Car c=new Car();
c.color="红色";
c.count=3;
c.run();
}
}

  对象的内存分析:

  1.main方法进入栈中运行

  2.创建一个Car类,在堆内存开一片空间,存入这个新建的对象,类的成员变量跟随进入堆中,并赋予默认值(null,0)

  3.这个内存地址传给引用型变量c,即c指向内存中的这个对象

  4.c指向的内存中的变量color,count被修改

  5.方法run由对象c调用,进栈执行

  6.run方法执行完毕,释放栈内存

  7.main方法结束,释放栈内存

  8.c变量消失,堆内存中的对象被清除,释放内存

3.类和对象的关系:

  类:对某一类事物的抽象描述;

  对象:用于表示现实中该事物的个体;

  类与对象的关系:类是对象的模板,对象是类的 实例;

4.成员变量和局部变量的关系

  写在类中的变量是成员变量,写在类中的方法中的变量是局部变量。

  区别:1.作用域:成员变量作用范围是整个类,局部变量作用与方法内或语句内;

     2.默认值:成员变量有默认值(null,0,0.0),局部变量没有默认值,不赋值不能用;

     3.内存位置:成员变量跟随对象进入盏中进行存储,局部变量跟随自己的方法进入盏内;

     4.生命周期:成员变量跟随对象存储在堆内存中等待jvm清理,生命周期相对更长;

             局部变量跟随方法,只要方法出栈,就不存在了,生命周期相对更短。

5.面向对象三大特征: 封装,继承,多态;

  封装的表现:

      方法就是一个封装体,类也是一个封装;

  封装的特点:

      1.提高了代码的复用性;

      2.隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用;

      3.提高了安全性。

6.private关键字

  建一个人的类:

public class Person {
String name;
int age;
public void run(){//定义跑步的方法
System.out.println(age+"岁的"+name+"在跑步");
}
}

建测试类:

public class Test {
public static void main(String[] args) {
Person p=new Person();
p.name="小明";
p.age=1000;
p.run();
}
}

运行结果:

在这个运行结果中,岁的小明在跑步;很明显,这个年龄是错误的,为了应对这个问题,我们就想:如果不能修改变量的值,这个问题就能解决;于是就有了private关键字;

被private修饰的成员,只能在本类中使用;可以对私有的成员提供公共的访问方式--方法;

public class Person {
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
if(age>130||age<0){
System.out.println("请输入正确的年龄!!!");
this.age=20;
}else{
this.age=age;
}
}
public void run(){
System.out.println(age+"岁的"+name+"在跑步");
}
}
public class Test {
public static void main(String[] args) {
Person p=new Person();
p.setName("小明");
p.setAge(30);
p.run();
}
}

运行结果

最新文章

  1. 关于sass的安装
  2. Liferay 6.2 改造系列之十七:当Portlet无权限时,不显示错误信息
  3. for与if、else的使用
  4. js之文档对象的设置(DOM)
  5. Mac下安装Django
  6. javascript实例学习之六—百叶窗效果
  7. 安装JDK后环境变量的配置
  8. 问题-[Delphi]通过Map文件查找内存地址出错代码所在行
  9. Artem and Array
  10. 五大P2P平台费用一览
  11. Python监控网站运行状况
  12. C Socket初探 - 加入多线程支持,限制最大接入客户端个数
  13. java 读取文件的路径
  14. (转)PL SQL Developer 使用总结
  15. Java编程思想阅读收获
  16. Ubuntu和Windows双系统的安装
  17. matplotlib坐标轴设置续-【老鱼学matplotlib】
  18. 18.22 sprintf函数功能
  19. Access restriction: The type &#39;Unsafe&#39; is not API
  20. CSS中 Zoom属性

热门文章

  1. php curl 并发
  2. LINQ 常用from
  3. Leetcode 1020. 将数组分成和相等的三个部分
  4. POJ2393奶酪工厂
  5. vue购物车功能源码
  6. Bellman-Ford算法——为什么要循环n-1次?图有n个点,又不能有回路,所以最短路径最多n-1边。又因为每次循环,至少relax一边所以最多n-1次就行了!
  7. win10 将本地项目上传到github (第一次+再次上传)
  8. window.open打开新窗口 参数
  9. 动态规划-最长单调递增子序列(dp)
  10. sqlalchemy动态组合查询语句。