黑马程序员----java语言的特性和面向对象编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、java语言的特性
JAVA语言有以下特性
        是目前使用最为广泛的网络编程语言之一。它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点。java是目前应用最广泛的编程语言。
        java语言易学易用,入门容易,java的基本语法与c语言非常相似,如赋值、循环、判断等等,但易学易用不代表java不强大,相反java是很强大的编程语言。java抛弃了一些复杂的内容,比如指针,比如内存管理,使得java语言更加简练,程序员能更加专注于编程。
        java是一门移植性很强的高级编程语言,在早期的智能手机上,就可以看到java编写的小程序,小游戏,给人的印象是紧凑美观,小巧灵活。java具有强大的移植性,因为java编写的程序需要运行在java虚拟机JVM上,当然包括windows,linux,安卓等环境下的虚拟机,所以java程序只需要稍微修改就能从一个平台移植到另一个平台。当然因为虚拟机的存在,java语言的效率要稍微低于c++,但不是很明显,java旺盛的生命力证明,在很长一段时间内,它都将是主流的编程语言。
        java语言对网络和图形界面的支持都非常好,在移动终端基本上是一家独大的局面。
        java编程的一个最重要的特点是,java不需要对内存进行管理,因为相应的工作都由虚拟机来完成,这个自动的机制简化了java的开发,给开发者带来极大的便利,但是相应的,损失了一些灵活性,降低了效率。因此底层开发一般很少用到java。
        java有强大的多线程管理机制,线程之间独立运行,不会相互干扰,可以用来开发多线程的应用程序。
        java是安全性很高的编程语言,重要的功能和代码都用封装的形式,私有的变量和函数无法直接访问和修改

二、面向对象编程的概念
        什么是面向对象编程呢?早期传统的编程语言如c语言是面向过程编程,着重于实现算法和控制流程,情调的是功能,而以java为代表的面向对象变成编程的语言,则是把编程中需要描述的事物封装成一个类,然后建立该类的一个实例,即对象,这样方便于调用该对象自身的方法(函数)来进行与自身相关的操作,强调的是功能的对象。
        来举一个形象的例子。一台空调就可以看做是一个对象,而所有同一型号的空调具有相同的特征,它们都属于空调这个类,类即包含了空调所有的特征。我们需要用空调的时候,只要对类进行实例化,得到一个对象,即买一台空调,就可以使用空调的功能了。空调具备了开、关、冷风、热风、温度控制等各种功能,我用遥控器遥控空调的时候,表面上是我操作了空调,实际上我只是一个发令者,起作用的是空调自己,即空调自己完成了开关、调温的操作,我不需要了解或指导空调怎么具体实现各种操作,因为空调内部都已经设计好了,或者说封装好了。我甚至可以有两台空调,分别执行不同的操作,而不会互相干扰。这样对于开发者来说,使用起来是十分方便的。类里面封装了多少方法,对象就能完成多少相应的操作。

        相应代码如下:
                class 空调  //空调的封装类
                {
                开( );
                关( );
                冷风( );
                热风( );
                调温( );
                }
        空调  a = new  空调( );  //新建空调的一个实例,即对象a
                a.开( );  //a打开了

                a.调温( ); //a调温了
        总之面向对象编程,就是委托对象替我们完成方法的调用。那么哪些事物能够成为对象呢?对于需要经常操作的数据,可以将其数据类型和用来操作它的常用方法封装成类,这样就可以使用其对象,将固定的编程步骤封装成对象来调用等等,都是可行的,万物皆对象,只要符合java编程的规则,什么都可以封装成对象。这就是java面向对象的基本思想。

        1.面向对象具有以下优点:
        统一性:jdk已经封装了很多java类,类中有固定的方法,java开发者只要拿来用就可以了,这就确立了一个统一的标准,不会出现每个人用自己的方法来编写程序,弄得五花八门的情况,统一以后,java的开发有了一个共同的规范,节省了很多的工作。
                移植性:java已经封装好的类是可以跨平台使用的,java因此获得良好的移植性。
                拓展性:java的类具有继承和覆盖的特点,为程序的维护和拓展奠定了基础,如果愿意,你随时可以给对象添加新功能而不必担心会把原来的程序搞得乱七八糟。
                要学好java,必须深刻理解面向对象编程的概念,并且灵活运用,你会感受到java的强大。
        2.面向对象的使用
                面向对象的三个特征:封装,继承,多态。
        开发其实是在找对象使用,没有对象就创建一个对象,具体说,是找对象,建立对象,使用对象,维护对象的关系
                类和对象的关系:类就是对现实生活中事物的描述,对象就是这类事物实实在在存在的个体,想要描述对象,就要提取对象中共性的内容,比如学生都有姓名、年龄、性别和学习的功能。映射到java中,这些描述就是class定义的类。对象产生后存储于堆内存中。
                描述事物其实就是在描述事物的属性和行为,属性对应类中的变量,行为对应类中的函数(方法)


        描述汽车的代码:

<span style="font-family:Microsoft YaHei;">class Car
{
	//描述颜色
	String color = "红色";
	//描述轮胎数
	int num = 4;
	//运行行为。
	void run()
	{
		System.out.println(color+".."+num);
	}
}</span>

三、匿名对象
        使用方式一形如:

                new 对象.属性(变量)

                new 对象.方法();
        简化了创建对象的步骤,直接新对象调用,一般来说,匿名对象调用属性是没有意义的,因为该属性不能再次被引用。当对象的方法只调用一次时,可以使用匿名对象,比较简化,若要多次调用,则必须给对象起个名字,即赋给引用变量。
        使用方式二: 

        将匿名对象作为参数传递给函数

<span style="font-family:Microsoft YaHei;">class  CarDemo
{
	public static void main(String[] args) 
	{
		new Car().num = 5;
		new Car().color = "blue";
		new Car().run();//匿名调用函数

		Car c = new Car();
		c.run();
		c.num = 4;//非匿名


		//Car q = new Car();
		//show(q);普通传入

		show(new Car());//匿名传入
	}

	//需求:汽车修配厂。对汽车进行改装,将来的车够改成黑车,三个轮胎。
	public static void show(Car c)
	{
		c.num = 3;
		c.color = "black";
		c.run();
	}
}</span>

四、对象的封装
        封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

        好处:
                将变化隔离。
                便于使用。
                提高重用性。
                提高安全性。

        封装原则:
                将不需要对外提供的内容都隐藏起来。
                把属性都隐藏,提供公共方法对其访问。

五、与封装有关的编程方法
1.public与private
        public:修饰后,类与方法具有较大访问权限
        private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
                私有只在本类中有效。
        将age私有化以后,类以外即使建立了对象也不能直接访问。但是人应该有年龄,就需要在Person类中提供对应访问age的方式。之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。对访问的数据进行操作。提高代码健壮性。
        注意:私有仅仅是封装的一种表现形式。


代码:

<span style="font-family:Microsoft YaHei;">class Person
{
	private int age;
	public void setAge(int a)
	{
		if(a>0 && a<130)
		{
			age = a;
			speak();
		}
		else
			System.out.println("feifa age");
	}

	public int getAge()
	{
		return age;
	}
	private void speak()
	{
		System.out.println("age="+age);
	}
}

class PersonDemo
{
	public static void  main(String[] args)
	{
		Person p = new Person();

		//p.age = -20;
		p.setAge(-40);
		//p.speak();
	}
}</span>

2.构造函数:
        特点:
                函数名与类名相同
                不用定义返回值类型
                不可以写return语句
        作用:给对象进行初始化。
        注意:默认构造函数的特点。多个构造函数是以重载的形式存在的。
        对象一建立就会调用与之对应的构造函数。构造函数的作用:可以用于给对象进行初始化。当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
        构造函数和一般函数在写法上有不同,在运行上也有不同。
        构造函数是在对象一建立就运行。给对象初始化。而一般方法是对象调用才执行,给是对象添加对象具备的功能。一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次。

        什么时候定义构造函数呢?
                当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
3.构造代码块:
        类中用{ }括起来的代码,不属于函数,叫做构造代码块,作用是给对象进行初始化。构造代码块在 对象一建立时就运行,而且优先于构造函数执行。
        和构造函数的区别:
                构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
        构造代码快中定义的是不同对象共性的初始化内容。
代码:

<span style="font-family:Microsoft YaHei;">class Person
{
	private String name;
	private int age;
	
	{
		//System.out.println("person code run");
		cry();
	}//构造代码块
	
	
	

	Person()
	{
		System.out.println("A: name="+name+",,age="+age);
		
	}
	/**/
	Person(String n)
	{
		name = n;
		System.out.println("B: name="+name+",,age="+age);

		//cry();
		
	}
	/*
	public void setName(String n)
	{
		name  = n;
	}
	public String getName()
	{
		return name;
	}
	*/
	Person(String n,int a)
	{
		name = n;
		age = a;
		System.out.println("C: name="+name+",,age="+age);
		//cry();
	}

	public void cry()
	{
		
		System.out.println("cry......");
	}
}

class  PersonDemo2
{
	public static void main(String[] args) 
	{
		Person p1 = new Person();

		

		Person p2 = new Person("lisi");
	
		//System.out.println(p2.getName());

		//Person p3 = new Person("wnagu",10);
	
		
	}
}</span>


3.this
        this代表它所在函数所属对象的引用。
        简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
        this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了了本类对象,都用this表示。
        this语句只能定义在构造函数的第一行,因为初始化的时候会先执行

<span style="font-family:Microsoft YaHei;">class Person
{
	private String name;
	private int age;
	Person(int age)
	{
		this.age = age;
	}
	Person(String name)
	{
		this.name = name;
	}
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public void speak()
	{
		System.out.println("name="+this.name+"...age="+this.age);
		this.show();
	}
	public void show()
	{
		System.out.println(this.name);
	}

	
	public boolean compare(Person p)
	{
		return this.age==p.age;

	}
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值