黑马程序员——Java基础---面向对象及其一些代码内部结构分析

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一.面向对象的概念


      就我个人的理解认为,面向对象本身就是一个抽象的概念,就是人们需要做某一件事的时候如果所有的事都事必躬亲的话那么自己至少会特别的 累,而且,有些时候自己还不能胜任该工作,这时候就需要用到某些工具或者某些人来协助自己来完成这件事,因为这些工具或者说是这些对象具备 能完成这件事,的属性或者动作,我们只需要调用这类对象即可;比如说人去饭店吃饭,到了饭店不需要自己去做饭菜,直接调用饭店的工作人员即 可, 首先是点菜,需要调用服务员,因为服务员具备点菜的功能,而服务员不会做菜,但是有厨师在,服务员只需调用厨师这个对象即可;这就是面向对 象的 理念.

有了这个概念后我们在软件开发的时候需要实现某一功能的时候使用面向对象的思想就把问题简单化了,可以先把方法体封装起来形成一个对 象, 需要用的时候直接调用就行,就省得每次写繁琐的代码,提高编程效率.

二.面向对象的开发流程

当我们拿到一个需求时,需要做的几个工作:
1.面向对象分析:

我们需要从需求中,取出我们系统需要记录的内容,这些内容我们要以"面向对象的方式"进行抽取,它们一般是一些"名词":

比如:某一学校需要建立一个系统,就需要记录老师,学生的信息,而老师,学生这些就是名词,需要提取.

2.面向对象设计:
我们将需要记录的"各类"信息,进一步明确需要记录的具体内容;明确类和类之间的关系等。
3.面向对象开发:
由组员根据设计的结果进行开发:

<span style="white-space:pre">	</span>class Student
<span style="white-space:pre">	</span>{
	String stuName;//学员姓名
	char stuSex;//学员性别
	int age;//学员年龄	
	public static void show(){
	}
	void show(){
		System.out.println("大家好,我是一名学生");
	}
<span style="white-space:pre">	</span>}
<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 26px;"><span style="white-space:pre">	</span>class Teacher
<span>	</span>{
	String teaName;//老师姓名
	char teaSex;//老师性别
	int age;//老师年龄	
	public static void show(){
	}
	void show(){
		System.out.println("大家好,我是一名老师");
	}
<span style="white-space:pre">	</span>}

 

三.关于面向对象的成员变量和局部变量

成员变量和局部变量的区别:
1.定义的位置不同:
1).局部变量:定义在某个方法体内;或者某个代码块内;
2).成员变量:定义在"类体"中
2.在内存中的位置不同:
1).局部变量(基本数据类型):在"栈"中;
2).成员变量:在"堆"中;
3.生命周期:
1).局部变量(基本数据类型):当所在代码块执行完毕,存储在栈中的局部变量会立即消失;
2).成员变量:作为垃圾,不会立即清除,后期会被"垃圾回收器"不定期清理;
4.初始化方式不一样:
1).局部变量:必须显示的手动为其指定初始值;否则不能访问其值;
2).成员变量:当分配堆内存时会被自动初始化。整数:0,浮点:0.0.,字符:\u0000,布尔:false,String和其他引用类型:null;

关于成员属性的命名:
1.不管什么类型,不能有同名的成员属性;
2.多个类中可以定义同名的变量;

<span style="white-space:pre">	</span>class Student
	{
	String stuName;//成员变量
	int a ;//存在堆中
	}
	class Teacher
	{
	int a;
	}
	class Demo 
	{
	public static void main(String[] args) 
	{
		int a = 10;//局部变量,存在栈中
		Student stu = new Student();//0x2233
	//	Student stu = new Student();//不可以。重复定义
	//	Teacher stu = new Teacher();//不可以。重复定义,不论什么类型,变量名都不能相同
	//	stu = new Teacher();//不可以。类型不匹配;
		
		stu = new Student();//可以的,0x5566
		for(int i = 0;i < 10 ;i++){//i 就是局部变量
		}		
	}

四.构造方法

1.构造方法,就是当实例化一个对象时,会调用的一个方法;
2.我们之前没有写过构造方法,系统给我自动添加一个什么都不做的构造方法;
3.构造方法的写法:
[访问修饰符] 构造方法名([形参列表]){
}
 注意:
  1)不可以指定"返回值类型"甚至是void;
  2)构造方法名要跟类名完全相同,大小写要一致;
  3)形参列表:可以没有。如果有,跟方法的形参列表定义一样;
4.构造方法是在每次"实例化此类对象时"被调用一次,之后将不会再次被调用;
5.构造方法的作用:由于它是在实例化此类对象时被调用,所以一般做一些初始化的工作。
例如:初始化成员变量;
6.构造方法可以没有,系统会自动添加一个什么都不做的构造方法;
 构造方法也可以有一个,那么意味着此时构造此类的对象只能通过这一种方式;
 构造方法可以有多个,那么意味着可以有多重方式去构造此类对象。这叫:构造方法的重载。方法名一样,参数列表不完全相同;
7.如果我们编写了构造方法,那么系统将不会再添加默认的构造方法;
8.尤其注意:如果一个类,只有一个构造方法,而且需要参数,那么,实例化此类的对象时,就必须拿着参数调用这个构造方法,别无他途。

<span style="white-space:pre">	</span>class Student
<span style="white-space:pre">	</span>{
	String stuName;
	int age;
	Student(){
		System.out.println("你实例化了一个Student对象");
		stuName = "小明";
		age = 18;
	}
	//重载构造方法。带两个参数的构造方法
	Student(String s , int a){
		stuName = s;
		age = a;
	}
	Student(String stuName){
		this.stuName = stuName;
	}
	Student(int age){
		this.age = age;
	}
	void show(){
		System.out.println("大家好,我叫:" + stuName + ",我今年:" + age);
	}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class Demo 
<span style="white-space:pre">	</span>{<span style="white-space:pre">	</span>
	public static void main(String[] args) 
	{
		Student stu = new Student();//-->实例化对象
		stu.stuName = "张三";//-->对象赋值
		stu.age = 20;//<span style="font-family: Arial;">-->对象赋值</span>
		stu.show();//调用show方法,因为重新对stu对象进行了赋值,所以最后打印"大家好,我叫张三,我今年:20";
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}

五.static关键字:
1.为什么要使用static关键字?
  对于一些已经有固定值的变量,每次实例化对象都会产生空间,其值基本是固定了,为了防止过多的存储此变量造成空间浪费,我们 可以将 此变量声明为static(静态)。

static可以修饰"成员属性"和"成员方法":
注意事项:
1.静态方法只能访问静态成员;
2.非静态方法,可以访问静态和非静态成员;

<span style="white-space:pre">	</span>class Student
<span style="white-space:pre">	</span>{
	static String schoolName = "欢迎访问xxx学校网站";//实例化对象时就会分配空间
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class Demo 
<span style="white-space:pre">	</span>{<span style="white-space:pre">	</span>
	public static void main(String[] args) 
	{
		System.out.println(Student.schoolName);//静态后可以通过"类名"直接调用;

		Student stu1 = new Student();
		Student stu2 = new Student();

		System.out.println(stu1.schoolName);//<span style="font-family: Arial;">欢迎访问xxx学校网站</span>
		stu2.schoolName = "<span style="font-family: Arial;">欢迎访问xxx学校XX分校网站</span><span style="font-family: Arial;">";</span>
		System.out.println(stu1.schoolName);//<span style="font-family: Arial;">欢迎访问xxx学校XX分校网站</span>
		System.out.println(Student.schoolName);/*因为静态方法区只有一个,所以无论通过哪个子类去更改方法区内的值都会改变原有的<span style="white-space:pre">							</span>值的,所以打印---><span style="font-family: Arial;">欢迎访问xxx学校XX分校网站*/</span>

	<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
由以上代码的分析,最终运行结果为如图
<img src="https://img-blog.csdn.net/20150418233210172?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjc0ODA5MDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值