黑马程序员——JAVA之面向对象(一)
2015-09-25 22:47
507 查看
------- http://www.itheima.com"
target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
基础知识概述
一. 类:是一组相关的"属性"和"行为"的集合;
对象:是该类事物的具体体现;
二.类和对象的关系:
1.现实:
类 对象
猫 波斯猫
折耳猫
加菲猫
----------------------------------------
狗 金毛
藏 獒
沙皮
2.代码:
class Cat{ Cat c1 = new Cat();
String name; c1.name = "波斯猫";
int age; c1.age = 2;
} -----------------------------------
Cat c2 = new Cat();
c2.name = "折耳猫";
c2.age = 3;
-----------------------------------------------------------
class Dog{ Dog d1 = new Dog();
String name; d1.name = "金毛";
int age; d1.age = 2;
} -----------------------------------
Dog d2 = new Dog();
d2.name = "藏獒";
d2.age = 3;
三.类的定义:
1.使用关键字:class(注意小写)
2.一个java源文件中:
1).如果定义多个类,只能有一个是public的;而且源文件名必须与这个public的类名一致;
2).如果定义多个类,可以没有public类;源文件名没有一致性要求;
3).main()方法不是必须放在public类中;
3.类中可以定义什么:
1).成员变量:A.可以是基本数据类型,也可以是任何引用数据类型; B.可以显示初始化;C.可以隐式初始化;
class Student{
String name = "张三" ;
int age = 20;
}
整型:0
浮点:0.0
字符:'\u0000'
布尔:false
引用类型:null
2).成员方法:
A.可以有参数,可以没参数;可以有返回值,可以没有返回值;
B.方法的"形参"可以是任何Java类型(基本数据类型、引用数据类型)
C.方法的"返回值"可以是任何Java类型(基本数据类型、引用数据类型)
D.一个类中可以定义多个同名的方法,但形参列表不完全相同,叫:方法的重载;
3).内部类(后面讲);
4.成员变量和局部变量的区别:
1).成员变量:A.定义在"类体"中;可以是任何数据类型;B.会被自动初始化;
class Student{
4000
String name;
void show(){
System.out.println("我叫:" + num); //打印:我叫:null
}
}
C.当实例化对象后,被存储在"堆"中;
D.当"对象"不被使用(没有任何引用),会被垃圾回收器回收时清理;
2).局部变量: A.定义在某个方法、或其它代码块中; B.必须显示初始化,否则不能访问其值;
class Student{
void show(){
String name;
System.out.println("我叫:" + name); //编译错误。局部变量必须显示初始化才能访问其值;
name = "张三"; //OK。可以被赋值。
}
}
C.当方法或其它代码块被执行时,基本数据类型的"值"和引用数据类型的"引用"都是存储在"栈"中;
D.当方法或代码块执行完毕时,会被立即清理;
四.对象的使用:
1.创建对象使用new关键字;会在堆中分配内存空间;
格式:类名 变量名 = new 类名();
2.一个类可以创建多个对象;
3.每个“对象”的“成员变量”在"堆"中都有一份独立的空间;每个“对象”的“成员方法”被存储在“方法区”中,多个对象只有一个“方法空间”;
4.对象的"引用(地址)"被存储在"栈"中;
五.方法的形参:
1.可以是"基本数据类型":1).调用时,必须传递此类型的“值”;2).调用时,是将值复制一份到方法内部;
3).在方法内,使用形参接收此值的副本;4).在方法内,如果更改此值,对原值没有影响;
int a = 10;
show(a);
System.out.println(a);//10
----------------------------------
public void show(int n){//n = 10
n = 20;//对原来的a的值是没有影响的;
}
2.可以是“引用数据类型“:1).调用时,必须传递此类型的“引用”; 2).调用时,是将“引用(地址)”复制一份到方法内部; 3).在方法内,使用形参接收此“引用”的副本; 4).在方法内,如果通过此引用更改堆中的值,对原堆中的值将会产生影响;
int[] arr = {14,324,435};//arr = 0x2233
show(arr);//show(0x2233)
System.out.println(arr[0]);//1000
-----------------------------------
public void show(int[] array){//array = 0x2233
array[0] = 1000;
}
六.匿名对象:
1.匿名对象:没有名字的对象:new Student();
2.匿名对象的两种使用情况:
1).对象调用方法仅仅一次的时候:new Student().show();
2).作为实际参数在方法中传递:printStudent(new Student());
七.封装:
1.直接对外部暴露成员变量是很不安全的,这时可以将成员变量“私有化”,对外提供公有的
get和set方法;
2.封装的好处:
1)隐藏实现细节,提供公共的访问方式
2)提高了代码的复用性
3)提高安全性。
3.封装的原则:
1)将不需要对外提供的内容都隐藏起来。
2)把属性隐藏,提供公共方法对其访问。
八.private关键字:
1.是一种“访问修饰符”(将在day10讲到);
Java中一共有四种访问修饰符:从宽到窄:public,protected,(默认),private
2.用于修饰“成员变量”和“成员方法”;
3.被private修饰的成员,只能在类的内部被其它成员访问。在类外部无法访问;
九.this关键字:
1.每个类都有一个“隐式”的变量:this;
2.它是在实例化对象时,由虚拟机自动赋值的,会被自动赋值为当前对象的“引用”。
3.this关键字可以调用本对象的“成员属性”、“成员方法”、“构造方法”;
4.以下情况必须显示的使用this:
1).“局部变量”覆盖“成员变量”时,可以使用this显示的访问被覆盖的“成员变量”;否则访问的是“局部变量”;
2).在一个构造方法中调用本类的其它构造方法;this()或this(实参);
部分代码演示
target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
基础知识概述
一. 类:是一组相关的"属性"和"行为"的集合;
对象:是该类事物的具体体现;
二.类和对象的关系:
1.现实:
类 对象
猫 波斯猫
折耳猫
加菲猫
----------------------------------------
狗 金毛
藏 獒
沙皮
2.代码:
class Cat{ Cat c1 = new Cat();
String name; c1.name = "波斯猫";
int age; c1.age = 2;
} -----------------------------------
Cat c2 = new Cat();
c2.name = "折耳猫";
c2.age = 3;
-----------------------------------------------------------
class Dog{ Dog d1 = new Dog();
String name; d1.name = "金毛";
int age; d1.age = 2;
} -----------------------------------
Dog d2 = new Dog();
d2.name = "藏獒";
d2.age = 3;
三.类的定义:
1.使用关键字:class(注意小写)
2.一个java源文件中:
1).如果定义多个类,只能有一个是public的;而且源文件名必须与这个public的类名一致;
2).如果定义多个类,可以没有public类;源文件名没有一致性要求;
3).main()方法不是必须放在public类中;
3.类中可以定义什么:
1).成员变量:A.可以是基本数据类型,也可以是任何引用数据类型; B.可以显示初始化;C.可以隐式初始化;
class Student{
String name = "张三" ;
int age = 20;
}
整型:0
浮点:0.0
字符:'\u0000'
布尔:false
引用类型:null
2).成员方法:
A.可以有参数,可以没参数;可以有返回值,可以没有返回值;
B.方法的"形参"可以是任何Java类型(基本数据类型、引用数据类型)
C.方法的"返回值"可以是任何Java类型(基本数据类型、引用数据类型)
D.一个类中可以定义多个同名的方法,但形参列表不完全相同,叫:方法的重载;
3).内部类(后面讲);
4.成员变量和局部变量的区别:
1).成员变量:A.定义在"类体"中;可以是任何数据类型;B.会被自动初始化;
class Student{
4000
String name;
void show(){
System.out.println("我叫:" + num); //打印:我叫:null
}
}
C.当实例化对象后,被存储在"堆"中;
D.当"对象"不被使用(没有任何引用),会被垃圾回收器回收时清理;
2).局部变量: A.定义在某个方法、或其它代码块中; B.必须显示初始化,否则不能访问其值;
class Student{
void show(){
String name;
System.out.println("我叫:" + name); //编译错误。局部变量必须显示初始化才能访问其值;
name = "张三"; //OK。可以被赋值。
}
}
C.当方法或其它代码块被执行时,基本数据类型的"值"和引用数据类型的"引用"都是存储在"栈"中;
D.当方法或代码块执行完毕时,会被立即清理;
四.对象的使用:
1.创建对象使用new关键字;会在堆中分配内存空间;
格式:类名 变量名 = new 类名();
2.一个类可以创建多个对象;
3.每个“对象”的“成员变量”在"堆"中都有一份独立的空间;每个“对象”的“成员方法”被存储在“方法区”中,多个对象只有一个“方法空间”;
4.对象的"引用(地址)"被存储在"栈"中;
五.方法的形参:
1.可以是"基本数据类型":1).调用时,必须传递此类型的“值”;2).调用时,是将值复制一份到方法内部;
3).在方法内,使用形参接收此值的副本;4).在方法内,如果更改此值,对原值没有影响;
int a = 10;
show(a);
System.out.println(a);//10
----------------------------------
public void show(int n){//n = 10
n = 20;//对原来的a的值是没有影响的;
}
2.可以是“引用数据类型“:1).调用时,必须传递此类型的“引用”; 2).调用时,是将“引用(地址)”复制一份到方法内部; 3).在方法内,使用形参接收此“引用”的副本; 4).在方法内,如果通过此引用更改堆中的值,对原堆中的值将会产生影响;
int[] arr = {14,324,435};//arr = 0x2233
show(arr);//show(0x2233)
System.out.println(arr[0]);//1000
-----------------------------------
public void show(int[] array){//array = 0x2233
array[0] = 1000;
}
六.匿名对象:
1.匿名对象:没有名字的对象:new Student();
2.匿名对象的两种使用情况:
1).对象调用方法仅仅一次的时候:new Student().show();
2).作为实际参数在方法中传递:printStudent(new Student());
七.封装:
1.直接对外部暴露成员变量是很不安全的,这时可以将成员变量“私有化”,对外提供公有的
get和set方法;
2.封装的好处:
1)隐藏实现细节,提供公共的访问方式
2)提高了代码的复用性
3)提高安全性。
3.封装的原则:
1)将不需要对外提供的内容都隐藏起来。
2)把属性隐藏,提供公共方法对其访问。
八.private关键字:
1.是一种“访问修饰符”(将在day10讲到);
Java中一共有四种访问修饰符:从宽到窄:public,protected,(默认),private
2.用于修饰“成员变量”和“成员方法”;
3.被private修饰的成员,只能在类的内部被其它成员访问。在类外部无法访问;
九.this关键字:
1.每个类都有一个“隐式”的变量:this;
2.它是在实例化对象时,由虚拟机自动赋值的,会被自动赋值为当前对象的“引用”。
3.this关键字可以调用本对象的“成员属性”、“成员方法”、“构造方法”;
4.以下情况必须显示的使用this:
1).“局部变量”覆盖“成员变量”时,可以使用this显示的访问被覆盖的“成员变量”;否则访问的是“局部变量”;
2).在一个构造方法中调用本类的其它构造方法;this()或this(实参);
部分代码演示
/* this关键字: 1.类中可以定义:成员属性、成员方法; 2.当实例化一个类的对象时,在堆空间,会产生此类对象的空间,内部包含了所有"成员属性"。 "成员方法"的字节码会被存储在"方法区"; 3.实例化多个对象,在堆中:每个对象都有独立的"成员属性"的空间,但"方法区中的方法的字节码"空间,只有一个; 4.如果方法内部需要访问"成员变量",那么JVM就要区分是哪个对象调用的此方法,那么就会去访问哪个对象的 成员属性。区分的方式:this 5.每个类都有一个隐式的this变量; 当实例化此类的一个对象时,由JVM自动为其赋值,赋值为:当前对象的引用; 6.我们可以显示的使用this去访问"本类的--成员属性、成员方法"; 7.有两种情况,必须的显示的使用this关键字: 1).局部变量覆盖成员变量时; 2).在一个构造方法内调用另一个构造方法(下次课讲) */ class Student{ String name; int age; int num = 10; void show(){ System.out.println(this.name + "," + this.age);//this可以调用本类的成员属性 } void fun(){ show();//OK的,可以这样直接调用 this.show();//OK的,也可以这样调用; } void fun2(){ int num = 20;//局部变量覆盖同名的成员变量,这个是可以的。 System.out.println("num = " + num);//此时访问的num 就是局部的num System.out.println("this.num = " + this.num);//此时可以通过this关键字,显示的访问被覆盖的成员变量num } } class Demo { public static void main(String[] args) { Student stu1 = new Student(); stu1.name = "胡歌"; stu1.age = 20; Student stu2 = new Student(); stu2.name = "霍建华"; stu2.age = 22; Student stu3 = new Student(); stu3.fun2(); } }
/* 一个标准的Student类 */ class Student { //********私有的成员属性*********// private String name; private int age; private char sex; //********构造方法****************// //1.无参的构造方法,一般什么都不做 Student(){ } //2.带全参的构造方法:为所有的成员属性赋值 Student(String name ,int age,char sex){ this.name = name; this.age = age; this.sex = sex; } //*********一些get和set方法***********// void setName(String name){ this.name = name; } String getName(){ return this.name; } void setAge(int age){ this.age = age; } int getAge(){ return this.age; } void setSex(char sex){ this.sex = sex; } char getSex(){ return this.sex; } //还可以定义一些普通成员方法 void show(){ System.out.println("大家好,我叫:" + this.name + ",今年:" + this.getAge() + ",性别:" + this.sex); } } class Demo { public static void main(String[] args) { //通过"无参构造方法"构造一个对象 Student stu = new Student(); stu.setName("张三"); stu.setAge(20); stu.setSex('男'); System.out.println(stu.getName() + "," + stu.getAge() + "," + stu.getSex()); System.out.println("调用show()方法:"); stu.show(); //通过"全参的构造方法"构造一个对象 Student stu2 = new Student("李四",22,'男'); System.out.println(stu2.getName() + "," + stu2.getAge() + "," + stu2.getSex()); System.out.println("调用show()方法:"); stu2.show(); } }
/* 当我们定义一个类,在类中定义"成员属性"时,这些属性是可以直接被其它类访问的。 这种方式,是很不安全的。所以这里讲解Java的封装: */ class Student { private String name; private int age; private String schooName = "北京大学";//此属性的值,只能被获取,不能被设置 void setAge(int a){ age = a; } int getAge(){ return age; } void setName(String n){ name = n; } String getName(){ return name; } String getSchoolName(){ return schoolName; } } class Demo { public static void main(String[] args) { Student stu = new Student(); // stu.name = "张三"; // stu.age = 200;//当age属性被私有化后,这里不能直接访问了 // System.out.println(stu.name + "," + stu.age);//当age属性被私有化后,这里不能直接访问了 stu.setName("张三"); stu.setAge(20); System.out.println(stu.getName() + "," + stu.getAge()); } }
/* 1.怎样调用类的成员属性和成员方法: 1).一定要通过类的"对象的引用"去调用; 2.以下情况可以使用匿名对象: 1).如果调用某个类的方法,只需要调用一次,这时,可以使用匿名对象; 2) */ class Student { String name; int age; char sex; } class MyMath { double getPI(){ return 3.1415926; } void printStudent(Student stu){//表示:接收一个有效的Student的引用 System.out.println("学员姓名:" + stu.name); System.out.println("学员年龄: " + stu.age); System.out.println("学员性别:" + stu.sex); } } class Demo { public static void main(String[] args) { // MyMath math = new MyMath(); System.out.prin 9cbc tln(new MyMath().getPI()); new MyMath().printStudent(new Student()); } }
相关文章推荐
- 黑马程序员_JAVA中正则表达式取子文本
- 黑马程序员——Java语言基础知识(一)
- 黑马程序员—Java概述
- 黑马程序员—java技术blog—第十一篇java基础应用命令行模拟登陆注册
- 黑马程序员—java技术blog—第九篇一些常见的基础语法概述
- Java程序员应该了解的10个面向对象设计原则
- 一篇五年码农的非结构化文章
- 老&新码农的技术理想
- 深信服软件开发面试---体无完肤
- 【.Net码农】C# .net 如何抓取网页内容
- 黑马程序员_常用的JAVA正则表达式
- 黑马程序员-面向对象的三个基本特征之封装
- 人生的悲观与乐观
- 面试题43:n个骰子的点数(《剑指offer》)
- 黑马程序员————二分法查找数组
- Java线程面试题 Top 50
- 面试---传递动态内存
- 黑马程序员-反射篇
- Java面试题和解答(二)
- 求职准备