zoukankan      html  css  js  c++  java
  • Java学习个人备忘录之面向对象概念

    对象,其实就是该类事物实实在在存在的个体。

    类与对象之间的关系?
    类:一类事物的描述。
    对象:该类事物的实例。在java中通过new来创建的。
    举例来说,类就是汽车说明书,类只能在理论上造一辆汽车,并且这个说明书非常明确的写了汽车有哪些部件、可以干什么等等信息,我们可以通过这个说明书(类)得知这辆车全方位的信息;对象就是按照这个说明书造出来的一辆汽车实体,是真实存在的,可以开走的。

    下面我们用类描述一辆小汽车:

    分析:
    1,属性
    轮胎数.
    颜色.
    2,行为
    运行.

    定义类其实就是在定义类中的成员
    成员:成员变量就是属性,成员函数就是行为。

    class Car
    {
    	int num;  //成员变量,汽车的属性
    	String color;//成员变量
    
    	void run()  //成员函数汽车的功能
    	{
    		System.out.println(num + "..." + color);
    	}
    }
    
    class CarDemo
    {
    	public static void main(String[] arge)
    	{
    		//在计算机中创建一个car的实例,通过new关键字
    		Car c = new Car(); //就是一个类类型的引用变量,指向了该类的对象
    		c.num = 4;
    		c.color = "red";
    		c.run();
    	}
    }
    

    成员变量和局部变量的区别

    1,成员变量定义在类中,整个类中都可以访问;局部变量定义在函数、语句、局部代码块中,只在所属的区域有效。

    2,成员变量存在于堆内存的对象中;局部变量存在于栈内存的方法中。

    3,成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

    4,成员变量都有默认初始化值;局部变量没有默认初始化值。


    类类型参数

    class CarDemo
    {
    	public static void main(String[] args)
    	{
    		Car c1 = new Car();
    		Car c2 = new Car();
    		show(c1);
    		show(c2);
    	}
    
    	//汽车改装厂
    	public static void show(Car c)//类类型的变量一定指向对象,要不就是null.
    	{
    		c.num = 3;
    		c.color = "black";
    		System.out.println(c.num + "..." + c.color);
    	}
    }
    

    匿名对象
    new car();  //匿名对象,其实就是定义对象的简写格式
    new Car().run();

    没有将car对象赋值给某一变量。

    1,当对象对方法仅进行一次调用的时候,就可以简化成匿名对象
    2,匿名对象可以作为实际参数进行传递


    基本数据类型参数传递

    class Demo
    {
    	public static void main(String[] args)
    	{
    		int x = 3;
    		show(x);
    		System.out.println("x="+x);
    	}
    	public static void show(int x)
    	{
    		x = 4;
    		return ;
    	}
    }

    这道题的结果是3。
    首先执行主函数,主函数进栈,然后执行int x = 3; 现在x的值为3。然后调用show函数,所以show 函数进栈,将x = 3 传进去,show函数将x赋值为4,show函数return,show函数出栈,这时,栈中只剩下了主函数中的x = 3 ,然后输出。所以结果为3。

    引用数据类型参数传递

    class Demo
    {
    	int x = 3;
    	public static void main(String[] args)
    	{
    		Demo d = new Demo();
    		d.x = 9;
    		show(d);
    		System.out.println(d.x);
    	}
    	public static void show(Demo d)
    	{
    		d.x = 4;
    	}
    }

    结果为4。
    首先执行主函数,主函数进栈,然后执行Demo d = new Demo(); 这时就在堆中开辟一块空间,同时将它的地址赋值给栈中的d,它中的x赋值为3,执行 d.x = 9; 堆中的x就被赋值为9;执行show(d);  show函数进栈,将对象d传入,堆中的x又被赋值为4;show函数执行完毕,show函数出栈;这时输出d.x。结果就为4。

    函数的封装

    class Person
    {
    	private int age;
    	public void setAge(int a)
    	{
    		if (a < 0)
    	{
    		System.out.println("年龄不能为负数");
    		return;
    	}
    		age = a;
    		speak();
    	}
    	void speak()
    	{
    		System.out.println("age=" + age);
    	}
    }
    
    class Test
    {
    	public static void main(String[] args)
    	{
    		Person p = new Person();
    		p.setAge(20);
    	}
    }
    我是Vector,谢谢关注。
  • 相关阅读:
    nyoj 游戏高手的烦恼 (二分图最小点覆盖)
    nyoj 三国志 (Dijkstra + 01背包)
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅱ
    《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅰ
    Java学习作业(14.4.21)
    2014上年度学习计划
    快速求幂(Quick Exponentiation)
    B. Inna and Nine
    B. Valera and Contest
    Problem 2128 最长子串
  • 原文地址:https://www.cnblogs.com/vector121/p/7460159.html
Copyright © 2011-2022 走看看