`
modabobo
  • 浏览: 502375 次
文章分类
社区版块
存档分类
最新评论

黑马程序员—Java基础学习笔记之面向对象

 
阅读更多

-----------android培训java培训java学习型技术博客、期待与您交流!-----------

1、 什么是面相对象

使用对象编程,相对面向过程而言

三大特征:封装(encapsultion)继承(inheritance)、多态(polymorphism)

2、 什么是对象

使用类创建的一个实例就是对象,一个类可以创建多个实例,每一个实例都是这个类的对象。

3、 什么是类

类是用来描述一类事物的,可以理解为一类事物的设计图,类名是名词,首字母大写(而方法都是动词,首字母小写)

如:帐号、人

4、 怎么用类描述事物

在类中使用成员变量描述事物的特征,

在类中使用方法描述事物的行为

5、 怎么创建对象

使用new关键字和指定类名来创建一个对象

例如:Person p = new Person();

这句话先在堆内存中创建了一个对象,然后栈内存中创建一个变量引用了对象的地址。

6、怎么使用对象

创建对象后,使用变量引用对象

通过变量.变量名访问对象中的特征和行为

7、实例:

class Demo_Object {
	public static void main(String[] args) 
	{
		
		Person p=new Person();//使用new类名()创建对象
		p.name="张三";//给对象的变量赋值
		p.age=26;
		System.out.println(p.name);
		System.out.println(p.age);
		p.eat();//调用对象的方法
		p.sleep();
		p.speak();
		
		
	}
	
}
class Person 
{
	//在类中使用成员变量描述事物的特征
	String name;
	int age;
	//在类中使用方法描述事物的行为
	void eat(){
		System.out.println(name+"吃饭");
	}
	void sleep(){
		System.out.println(name+"睡觉");
	}
	void speak(){
		System.out.println(name+"今年"+age+"岁了");
	}
}

分析:

当编译Demo_Object.java,时候,在内部发现需要Person类,此时虚拟机会查找Person.class,如果没有找到就会在当前目录查找Person.java,找到了后,会先编译它,然后得到Person.class,才编译Demo_Object.java

8、成员变量和局部变量的区别?

成员变量:

①成员变量定义在类中,在整个类中都可以被访问。

②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

③成员变量有默认初始化值。

局部变量:

①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

③局部变量没有默认初始化值。

9、成员变量初始化

当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。基本数据类型初始化值为0,引用数据类型初始化值为null

成员变量类型

初始值

byte

0

short

0

int

0

long

0

float

double

0.0F

0.0D

char

boolean

‘\u000’

False

其他变量类型

null

10、举例 创建对象、使用对象

class Person {		// 类名: 名词, 首字母大写
	private String name;	// 在类中使用成员变量变量描述事物的特征
	private int age;		// 变量名: 首字母小写
	
	Person() {	
		System.out.println("Person类的构造函数: Person()");
	}
	
	Person(String n, int a) {
		System.out.println("Person类的构造函数: Person(String name, int age)");
		name = n;//局部变量/临时变量
		age = a;//局部变量
	}          													//提供set方法,让其他类中可以设置成员变量
	public void setName(String name){
		this.name=name;
	}
	//提供一个get方法,让其他类中的可以获取成员变量
	public String getName(){
		return name;
	}
	// 在类中使用成员方法描述事物的行为										void eat(){	               			                          				      			System.out.println(name + "吃饭, 雕爷牛腩");
	}
	
class Demo_Object 
{
	public static void main(String[] args) 
	{
		
		Person p= new Person();//使用new类名()创建对象,P就是一个引用变量,指向该类的对象
		p.setName("张三三");//给对象的变量赋值								      System.out.println(p.getName());
		p.eat();//调用对象的方法
	}	


结果:

11、匿名对象

我们可以不定义变量引用对象,使用new关键字创建对象后直接使用,这样的对象没有名字,所以叫匿名对象。

new person().eat();//匿名对象

通常我们需要使用一个对象且只使用一次的时候,就可以使用匿名对象。比如将对象作为一个参数传递给另外一个函数。

匿名对象因为没有任何引用到达,在使用一次之后即成为垃圾。

举例:匿名对象

class Person 
{
	String name="胡歌";
	int age=26;
	void speak() {
		System.out.println("我叫" + name + ", 今年" + age + "岁了");
	}
}
class Demo_Person
{
	public static void main(String[] args){
		//对对象仅调用一次时,可以是用匿名对象
		new Person().speak();
		//匿名对象可以做为实参进行传递
		show(new Person());
	}
	public static void show(Person p){
		p.name="";
		p.age=20;
		System.out.println(p.name+"......"+p.age);
	}
}

结果:


12、构造函数

是一个特殊的函数

没有返回值类型,注意:没有返回值类型不等同于void

函数名和类名一致,大写(而一般方法通常:返回值类型+小写方法名,不过写成和类名相同也没错,但不推荐)

在使用new关键字创建对象之后自动调用。

在构造函数的第一天语句this(参数列表)可以调用当前类的其他构造函数(递归构造器调用==死循环,如无参的调有参的,有参的调无参的,没完了)

一个类如果没定义任何构造函数,会默认生成一个无参的构造函数(隐式的),没有任何代码,如果定义了有参构造函数,则会覆盖掉这个无参构造函数;如过还想调用无参的构造函数,则需要同时定义无参和有参构造函数。

附:在构造函数前面加上返回值就只是一般函数了。

举例:构造函数

class Person 
{
	String name="胡歌";
	int age=26;
	//定义一个Person类的构造函数
    //构造函数,而且是空参数的
    Person(){
		System. out.println("空参数的构造函数" );
      }
	void speak() {
		System.out.println("我叫" + name + ", 今年" + age + "岁了");
	}
}
class Demo
{
	public static void main(String[] args){
		//构造函数:构建创造对象时调用的函数
		//作用:可以给对象进行初始化
		Person p = new Person();
		 p.speak();
	}
}

结果:

13、this关键字

(1)、在方法中的局部变量和成员变量同名的时候,如果直接使用变量名调用,会优先访问局部变量,没有才会访问成员变量,如果希望直接访问成员变量,则用this.变量名

(2)this(参数列表)可以调用当前类的其他构造函数

举例 this关键字使用

class Person 
{
	String name;
	int age;
	//定义一个Person类的构造函数
    Person(String name){
		//通过this区分成员变量和局部变量
		this.name=name;
	}
	Person(String name,int age){
		//this也可以用于在构造函数中调用其他构造函数
		this.name=name;
		this.age=age;
      }
	void speak() {
		System.out.println("我叫" + this.name + ", 今年" + this.age + "岁了");
	}
}
class Demo
{
	public static void main(String[] args){
		//构造函数:构建创造对象时调用的函数
		//作用:可以给对象进行初始化
		Person p1 = new Person("胡歌");
		 p1.speak();
		 Person p2 = new Person("王菲",40);
		 p2.speak();
	}
}

结果:

附:通过this在构造函数中调用其他构造函数的时候,只能定义在构造函数的第一行,因为初始化动作要先执行,否则就会报错

14、static关键字

什么是static关键字?

代表静态的,它可以用来修饰类的成员(变量,方法,代码块,内部类)

static修饰的成员,随着类的加载而加载、优先于对象存在、被所有对象所共享、可以直接被类名调用。

举例 static关键字

class  Demo_SellTicket
{
	public static void main(String[] args) 
	{
		TicketSeller seller1=new TicketSeller();
		TicketSeller seller2=new TicketSeller();
		seller1.name="张三";
		seller2.name="李四";

		seller1.sell();
		seller2.sell();
		seller1.sell();

	}
}
class TicketSeller
{
	String name;
	static int ticketCount=100;//当前某个数据需要共享的时候,就应该定义
	public void sell(){
		System.out.println("售票员"+name+"卖出了一张车票,剩余"+--ticketCount+"张");
	}
}

结果:

15、主函数

//主函数是Java程序的入口,在虚拟机启动的时候, 自动找主函数运行

// public代表公有的,所有的类都能访问的, 为了能让虚拟机访问到,所以加上public

// static代表静态的,虚拟机调用主方法时, 不用创建该类对象,可以直接使用

// void代表返回值为空,虚拟机调用该方法后不需要返回值

// main代表函数的名字,虚拟机启动的时候就找这个名字

//String[] args代表运行方法时传入的参数, 启动虚拟机的时候是可以传入参数的


class  Demo_Main
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}

附:当类不需要独立运行时候可以不加主函数

-----------android培训java培训java学习型技术博客、期待与您交流!-----------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics