黑马程序员——Java编程语言学习总结– 面向对象(上)
2015-03-23 21:52
267 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
面向对象和面向过程都是一种思想,面向过程是以函数为基础,完成各种操作,面向对象是以对象为基础,完成各种操作,面向对象是基于面向过程的。总结:万物皆对象。
2,面向对象思想的特点
是一种更符合人思考习惯的思想
可以将复杂的事情简单化
将程序员从执行者转换成了指挥者
3,把大象装进冰箱的实现
思考:怎么样才能让我们的操作更符合面向对象思想呢?
分析步骤:A:分析该系统中包含那些对象。B:明确每个对象可以做什么。C:明确各个对象间的关系。
代码示例:
class 大象
{
public void in()
{
System.out.println("装进大象");
}
}
class 冰箱
{
//一个打开冰箱门的方法Open
//一个关闭冰箱门的方法Close
}
class 测试
{
冰箱对象.Open();
大象对象.In();
冰箱对象.Close();
}
4,类与对象的关系概述
我们学习编程语言,其实就是为了把显示世界的事物通过程序语言给体现出来。Java中描述事物无非就是描述事物的属性和行为。
Java语言,最基本的单位是类,类就是用来体现事物的。
类:类是属性和行为的集合,是一个抽象的概念。
成员变量:其实也就是属性。
成员方法:其实也就是行为。
对象:就是类的具体的存在,体现。
5,如何定义一个学生类
学生事物:属性:姓名,年龄,性别。。。行为:学习,吃饭,睡觉。。。
把事物转换成Java中的类。
学生类:成员变量:例如:姓名,年龄,性别;成员方法(就是函数先把static去掉):例如:吃饭的方法,睡觉的方法,学习的方法。
6,学生类的内存图
方法区:Student:study(); StudentTest:main();
调用方式:Student s1 = new Student();
Student s2 =s1;
7,什么时候将变量定义为成员变量
成员变量其实是这个类的属性。只有能够用于描述一个类的属性的东西,才可以定义为类的成员变量。否则,就应该定义为局部变量。
8,成员变量和局部变量的区别
A:定义位置区别
成员变量:再类中,方法外
局部变量:在方法中,或者方法的形式参数
B:初始化值的区别
成员变量:有默认初始化值
局部变量:没有默认初始化值,想先定义,赋值,才能使用
C:存储位置区别
成员变量:存储在堆中,随着对象的存在而存在,随着对象的消失而消失。
局部变量:存储在栈中。随着方法的调用而存在,随着方法调用完毕而消失。
在使用变量的时候:首先在局部范围找,有就使用。接着在成员方法中找,有就使用。如果在成员位置没有,就报错。(使用过程中,遵循一个原则:就近原则。)
9,匿名对象的概述和使用
匿名对象的概念:就是没有名字的对象。
匿名对象的应用场景:A:当对对象方法仅调用一次的时候。
B:匿名对象可以作为实际参数进行传递。
那么,我们要保证数据的真实性,怎么办呢?
那么就必须对数据进行校验。
要想做校验,就必须有逻辑结构语句。
要想写逻辑结构语句,就必须定义方法。、但是,现在即使我们写了方法,别人还是可以通过:对象.成员变量直接使用。所以,我们应该先解决根本问题,让外界不能直接通过 对象名.成员变量 访问数据。怎么办呢? Java就提供了一个修饰符 Private。定义:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
1,private关键字
表示私有的意义。可用于修饰成员变量和成员方法。
被他修饰完毕后的内容,在其他类中是不能直接访问的。private仅仅是封装的一种体现。因为类,函数等其实也是一个封装的体现。
2,封装的代码体现:
/*
这一次的代码是用封装的概念来体现的标准代码。
*/
class Teacher
{
//类的成员变量都加private
private String name;
private int age;
//一般,get/set同时出现
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
public void setAge(int a)
{
age = a;
}
public int getAge()
{
return age;
}
}
classTeacherTest
{
public static void main(String[] args)
{
//创建对象
Teacher t = new Teacher();
//System.out.println(t.name+"***"+t.age);
//我要使用,怎么办呢?
System.out.println(t.getName()+"***"+t.getAge());
//给变量赋值
t.setName("林青霞");
t.setAge(26); //
System.out.println(t.getName()+"***"+t.getAge());
}
}
A:方法名必须和类名一致
B:没有返回值类型
C:没有具体的返回值
2,作用:
给对象进行初始化。
3,注意事项:
A:如果你没有给出构造方法,那么,系统会默认给出一个无参构造方法。
B:只要你给出了构造方法,系统将不再提供无参构造。推荐做法:请永远手动给出无参构造。
C:构造方法重载其实就是构造方法接受不同的参数。
就是由{}括起来的代码。
2,分类:
A:局部代码块:定义在方法中的代码块儿,叫局部代码块儿。
作用:让变量尽可能早的从内存中消失,提高效率。
B:构造代码块:定义在方法外的代码块儿,叫构造代码块儿。
把所有构造方法中的共同的内容定义在构造代码块中。
构造代码块先执行,然后再执行构造函数。
this代表其所在方法所属对象的引用。换言之:this代本类对象的引用。
2,this的应用场景:
用于解决局部变量隐藏成
4000
员变量值的问题。
3,this关键字的标准代码写法:
class Dog
{
private String name;
private int age;
public Dog(String name,int age)
{
this.name = name;
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
A:把Person.class文件加载到内存。(类加载器)
B:在栈内开辟一个变量空间。给P使用。
C:new Person()就会在堆内存开辟空间。
D:方法进方法区,有类名做标记。并且,同时成员变量进堆内存并给出了默认初始化值。(name:null age:0 )
E:对成员变量进行显示初始化
F:如果有构造代码块,可以在构造代码块中对成员变量赋值。
G:执行构造方法中对成员变量的赋值。
H:到此为止,对象初始化完毕。
I:把堆内存对象的首地址值赋值给栈内存的p变量。
如果都是“中国”这个字符串,你每次创建对象都来一个。那么,如果你有10000个对象,哪就有10000个“中国”占用内存空间。而明明我们知道,他们都是“中国”的。假如,我们能够,让他们使用的国籍是相同的,也就是说,将来只存储一个“中国”,该有多好呢?
针对这种情况,java提供了一个关键字叫:static
他可以修饰成员变量和成员方法。
2,特点:
A:随着类的加载而加载。
B:优先于对象存在。
C:为什么要使用静态呢?
如果某个内容是被所有对象所共享,那么,该内容就应该用静态修饰。
没有被静态修饰的内容,其实是属于对象的特殊描述。
D:可以直接被类名调用。
3,注意事项:
A:在静态方法中,是没有this关键字的。
因为静态是随着类的加载而加载。而this是对象创建才存在的。
B:静态方法只能访问静态成员变量和静态成员方法。
C:静态的内容可以通过对象调用,也可以通过类名调用,但是一般推荐使用类名调用。
javadoc -d 目录名
2,使用步骤:
A:找到文档,打开文档。
B:点击左上角的显示变成隐藏,然后点击索引。
C:你应该知道你要找谁? Math
所以,你就在那个输入框里边输入“Math",然后回车,再回车。
D:看到这个类的结构
如果是java。lang包下的类,类可以直接使用的。(Math)
否则,就需要导包才能使用。(Scanner)
F:看构造方法。
字段--- 也就是成员变量 --- 也叫 属性。
A:有构造方法,那么,就通过构造方法创建对象使用。
B:没有构造方法,那么,这个类的成员一般都是静态。通过类名调用。
G:按照正常的操作使用方法。
左边:
是否静态:如果静态修饰,那么可以通过类名调用。
是否有明确返回值:如果是void类型,就直接调用即可。否则,就可以输出或者赋值。
右边:
看方法名:不要写错了。
看参数:看参数的类型及个数。
成员常量:
Math.E和Math.PI
成员方法:
A:绝对值:Math.abs(参数类型 形式参数)
B:天花板数:Math.ceil(12.3); //结果是13.0
C:地板数:Math.floor(12.3)
D:四舍五入:Math.round(12.6);
E:随机数:Math.random();
F:两个数中的最大值:Math.max(12,53);
G:两个数中的最小值:Math.min(11,66);
H:三个数中的最大值:Math.max(Math.max(11,33),120);
Math类方法探究:
猜数字小游戏代码:
/*
猜数字游戏:
A:产生一个1-100之间的随机数。
B:键盘录入一个数据。
C:把两个数据进行比较:
大了 - 你猜的数据大了
小了 - 你猜的数据小了
等了 - 恭喜你,猜中了
D:为了多次猜,用循环改进。
由于不知道要猜多少次,所以用while循环。
*/
importjava.util.Scanner;
classGuessNumber
{
public static void main(String[] args)
{
//产生一个1-100之间的随机数
int number =(int)(Math.random()*100)+1;
while(true)
{
//键盘录入一个数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数据(1-100):");
int guessNumber =sc.nextInt();
//把两个数据进行比较
if(guessNumber>number)
{
System.out.println("你猜的数据"+guessNumber+"大了");
}
elseif(guessNumber<number)
{
System.out.println("你猜的数据"+guessNumber+"小了");
}
else
{
System.out.println("恭喜你,猜中了。到田野处领奖品");
break;
}
}
}
}
A, Random(); :使用默认种子,当前时间的毫秒值。每次产生的随机数都是变化的。
B, random(long seed); :如果给定了种子,每次都是按照种子作为初始值产生的随机数,如果种子固定,值是一样的。
Random的成员方法:
Random r = newRandom();
int ---r.nextInt(); ---》int范围内的一个数据
int ---r.nextInt(int n); ---》在0到n范围内的一个数据,包括0,不包括n。
举例:产生一个1-100之间的随机数B:Random r = new Random();
int number = r.nextInt(100)+1;
(一)类与对象
1,面向对象的概述与起源面向对象和面向过程都是一种思想,面向过程是以函数为基础,完成各种操作,面向对象是以对象为基础,完成各种操作,面向对象是基于面向过程的。总结:万物皆对象。
2,面向对象思想的特点
是一种更符合人思考习惯的思想
可以将复杂的事情简单化
将程序员从执行者转换成了指挥者
3,把大象装进冰箱的实现
思考:怎么样才能让我们的操作更符合面向对象思想呢?
分析步骤:A:分析该系统中包含那些对象。B:明确每个对象可以做什么。C:明确各个对象间的关系。
代码示例:
class 大象
{
public void in()
{
System.out.println("装进大象");
}
}
class 冰箱
{
//一个打开冰箱门的方法Open
//一个关闭冰箱门的方法Close
}
class 测试
{
冰箱对象.Open();
大象对象.In();
冰箱对象.Close();
}
4,类与对象的关系概述
我们学习编程语言,其实就是为了把显示世界的事物通过程序语言给体现出来。Java中描述事物无非就是描述事物的属性和行为。
Java语言,最基本的单位是类,类就是用来体现事物的。
类:类是属性和行为的集合,是一个抽象的概念。
成员变量:其实也就是属性。
成员方法:其实也就是行为。
对象:就是类的具体的存在,体现。
5,如何定义一个学生类
学生事物:属性:姓名,年龄,性别。。。行为:学习,吃饭,睡觉。。。
把事物转换成Java中的类。
学生类:成员变量:例如:姓名,年龄,性别;成员方法(就是函数先把static去掉):例如:吃饭的方法,睡觉的方法,学习的方法。
6,学生类的内存图
方法区:Student:study(); StudentTest:main();
调用方式:Student s1 = new Student();
Student s2 =s1;
7,什么时候将变量定义为成员变量
成员变量其实是这个类的属性。只有能够用于描述一个类的属性的东西,才可以定义为类的成员变量。否则,就应该定义为局部变量。
8,成员变量和局部变量的区别
A:定义位置区别
成员变量:再类中,方法外
局部变量:在方法中,或者方法的形式参数
B:初始化值的区别
成员变量:有默认初始化值
局部变量:没有默认初始化值,想先定义,赋值,才能使用
C:存储位置区别
成员变量:存储在堆中,随着对象的存在而存在,随着对象的消失而消失。
局部变量:存储在栈中。随着方法的调用而存在,随着方法调用完毕而消失。
在使用变量的时候:首先在局部范围找,有就使用。接着在成员方法中找,有就使用。如果在成员位置没有,就报错。(使用过程中,遵循一个原则:就近原则。)
9,匿名对象的概述和使用
匿名对象的概念:就是没有名字的对象。
匿名对象的应用场景:A:当对对象方法仅调用一次的时候。
B:匿名对象可以作为实际参数进行传递。
(二)封装
现在数据的赋值是没有问题的,但是不符合常理。这样的数据其实是不真实的。那么,我们要保证数据的真实性,怎么办呢?
那么就必须对数据进行校验。
要想做校验,就必须有逻辑结构语句。
要想写逻辑结构语句,就必须定义方法。、但是,现在即使我们写了方法,别人还是可以通过:对象.成员变量直接使用。所以,我们应该先解决根本问题,让外界不能直接通过 对象名.成员变量 访问数据。怎么办呢? Java就提供了一个修饰符 Private。定义:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
1,private关键字
表示私有的意义。可用于修饰成员变量和成员方法。
被他修饰完毕后的内容,在其他类中是不能直接访问的。private仅仅是封装的一种体现。因为类,函数等其实也是一个封装的体现。
2,封装的代码体现:
/*
这一次的代码是用封装的概念来体现的标准代码。
*/
class Teacher
{
//类的成员变量都加private
private String name;
private int age;
//一般,get/set同时出现
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
public void setAge(int a)
{
age = a;
}
public int getAge()
{
return age;
}
}
classTeacherTest
{
public static void main(String[] args)
{
//创建对象
Teacher t = new Teacher();
//System.out.println(t.name+"***"+t.age);
//我要使用,怎么办呢?
System.out.println(t.getName()+"***"+t.getAge());
//给变量赋值
t.setName("林青霞");
t.setAge(26); //
System.out.println(t.getName()+"***"+t.getAge());
}
}
(三)构造方法
1,格式及特点:A:方法名必须和类名一致
B:没有返回值类型
C:没有具体的返回值
2,作用:
给对象进行初始化。
3,注意事项:
A:如果你没有给出构造方法,那么,系统会默认给出一个无参构造方法。
B:只要你给出了构造方法,系统将不再提供无参构造。推荐做法:请永远手动给出无参构造。
C:构造方法重载其实就是构造方法接受不同的参数。
(四)代码块
1,概念:就是由{}括起来的代码。
2,分类:
A:局部代码块:定义在方法中的代码块儿,叫局部代码块儿。
作用:让变量尽可能早的从内存中消失,提高效率。
B:构造代码块:定义在方法外的代码块儿,叫构造代码块儿。
把所有构造方法中的共同的内容定义在构造代码块中。
构造代码块先执行,然后再执行构造函数。
(五)this关键字
1,概述:this代表其所在方法所属对象的引用。换言之:this代本类对象的引用。
2,this的应用场景:
用于解决局部变量隐藏成
4000
员变量值的问题。
3,this关键字的标准代码写法:
class Dog
{
private String name;
private int age;
public Dog(String name,int age)
{
this.name = name;
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
(六)对象的初始化过程
Person p =new Person();在内存中是怎么执行的?A:把Person.class文件加载到内存。(类加载器)
B:在栈内开辟一个变量空间。给P使用。
C:new Person()就会在堆内存开辟空间。
D:方法进方法区,有类名做标记。并且,同时成员变量进堆内存并给出了默认初始化值。(name:null age:0 )
E:对成员变量进行显示初始化
F:如果有构造代码块,可以在构造代码块中对成员变量赋值。
G:执行构造方法中对成员变量的赋值。
H:到此为止,对象初始化完毕。
I:把堆内存对象的首地址值赋值给栈内存的p变量。
(七)static关键字
1,概述:如果都是“中国”这个字符串,你每次创建对象都来一个。那么,如果你有10000个对象,哪就有10000个“中国”占用内存空间。而明明我们知道,他们都是“中国”的。假如,我们能够,让他们使用的国籍是相同的,也就是说,将来只存储一个“中国”,该有多好呢?
针对这种情况,java提供了一个关键字叫:static
他可以修饰成员变量和成员方法。
2,特点:
A:随着类的加载而加载。
B:优先于对象存在。
C:为什么要使用静态呢?
如果某个内容是被所有对象所共享,那么,该内容就应该用静态修饰。
没有被静态修饰的内容,其实是属于对象的特殊描述。
D:可以直接被类名调用。
3,注意事项:
A:在静态方法中,是没有this关键字的。
因为静态是随着类的加载而加载。而this是对象创建才存在的。
B:静态方法只能访问静态成员变量和静态成员方法。
C:静态的内容可以通过对象调用,也可以通过类名调用,但是一般推荐使用类名调用。
(八)如何使用帮助文档
1,通过javadoc命令制作帮助文档:javadoc -d 目录名
2,使用步骤:
A:找到文档,打开文档。
B:点击左上角的显示变成隐藏,然后点击索引。
C:你应该知道你要找谁? Math
所以,你就在那个输入框里边输入“Math",然后回车,再回车。
D:看到这个类的结构
如果是java。lang包下的类,类可以直接使用的。(Math)
否则,就需要导包才能使用。(Scanner)
F:看构造方法。
字段--- 也就是成员变量 --- 也叫 属性。
A:有构造方法,那么,就通过构造方法创建对象使用。
B:没有构造方法,那么,这个类的成员一般都是静态。通过类名调用。
G:按照正常的操作使用方法。
左边:
是否静态:如果静态修饰,那么可以通过类名调用。
是否有明确返回值:如果是void类型,就直接调用即可。否则,就可以输出或者赋值。
右边:
看方法名:不要写错了。
看参数:看参数的类型及个数。
(九)Math类
Math中我们需要掌握的功能:成员常量:
Math.E和Math.PI
成员方法:
A:绝对值:Math.abs(参数类型 形式参数)
B:天花板数:Math.ceil(12.3); //结果是13.0
C:地板数:Math.floor(12.3)
D:四舍五入:Math.round(12.6);
E:随机数:Math.random();
F:两个数中的最大值:Math.max(12,53);
G:两个数中的最小值:Math.min(11,66);
H:三个数中的最大值:Math.max(Math.max(11,33),120);
Math类方法探究:
猜数字小游戏代码:
/*
猜数字游戏:
A:产生一个1-100之间的随机数。
B:键盘录入一个数据。
C:把两个数据进行比较:
大了 - 你猜的数据大了
小了 - 你猜的数据小了
等了 - 恭喜你,猜中了
D:为了多次猜,用循环改进。
由于不知道要猜多少次,所以用while循环。
*/
importjava.util.Scanner;
classGuessNumber
{
public static void main(String[] args)
{
//产生一个1-100之间的随机数
int number =(int)(Math.random()*100)+1;
while(true)
{
//键盘录入一个数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数据(1-100):");
int guessNumber =sc.nextInt();
//把两个数据进行比较
if(guessNumber>number)
{
System.out.println("你猜的数据"+guessNumber+"大了");
}
elseif(guessNumber<number)
{
System.out.println("你猜的数据"+guessNumber+"小了");
}
else
{
System.out.println("恭喜你,猜中了。到田野处领奖品");
break;
}
}
}
}
(十)Random类
Random的构造方法:A, Random(); :使用默认种子,当前时间的毫秒值。每次产生的随机数都是变化的。
B, random(long seed); :如果给定了种子,每次都是按照种子作为初始值产生的随机数,如果种子固定,值是一样的。
Random的成员方法:
Random r = newRandom();
int ---r.nextInt(); ---》int范围内的一个数据
int ---r.nextInt(int n); ---》在0到n范围内的一个数据,包括0,不包括n。
举例:产生一个1-100之间的随机数B:Random r = new Random();
int number = r.nextInt(100)+1;
相关文章推荐
- 黑马程序员--Java基础之面向对象总结(一)
- 黑马程序员_java的面向对象(对第六课静态..类的加载过程和单例的总结)
- 黑马程序员-Java基础总结04——面向对象
- 黑马程序员---------Java面向对象——异常总结
- 黑马程序员--Java面向对象——IO流 总结应用(打印流)
- 黑马程序员_匿名内部类和面向对象总结
- 黑马程序员————OC面向对象三大特征总结
- 黑马程序员--Java基础总结--面向对象
- 黑马程序员 Java基础知识总结-面向对象三大特征
- 黑马程序员---------java面向对象(自学总结)
- 黑马程序员_java的面向对象(对第七课继承..抽象类..接口及fianl应用总结)
- 黑马程序员 Java自学总结八 面向对象三个特征之多态
- 黑马程序员 Java自学总结七 面向对象三个特征之继承
- 黑马程序员 Java面向对象——集合框架总结
- 黑马程序员_面向对象的学习总结
- 黑马程序员_java面向对象(对第五课面向对象..封装..构造..this应用总结)
- 黑马程序员 Java自学总结六 面向对象三个特征之封装
- 黑马程序员-关于面向对象的个人总结
- 黑马程序员_JAVA基础知识总结——面向对象三大特征
- 黑马程序员——面向对象的一些小概念知识总结