`
bruthe
  • 浏览: 1508 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_java面向对象(一)

阅读更多

                                         ------- android培训java培训、期待与您交流! ----------

一:构造函数

       特点:

           ①函数名与类名相同

           ②不用定义返回值类型

           ③不可以些return语句

       作用:

            给对象进行初始化(对象一建立就会调用与之对应的构造函数)

       注意:

           ①多个构造函数是以重载的形式存在的

           ②当一个类中没有定义构造函数时,系统会默认给类加一个空参数构造函数

           ③当在类中自定义了构造函数,默认的构造函数就没有了

       构造函数和一般函数在写法上与不同,在运行上也有不同:

           ①构造函数是在对象一建立就运行,给对象初始化,而一般方法是对象调用才执行

           ②一个对象建立,构造函数只运行一次,而一般函数可以被对象调用多次

二:构造代码块

       作用:

            给对象初始化,对象一建立就运行,而且优先于构造函数执行

       和构造函数区别:

            构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化

            构造代码块中定义的是不同对象共性的初始化内容

三:this关键字

       this代表它所在函数所属对象的引用,简单的说哪个对象在调用this所在的函数,this

       就代表哪个对象

 

       this语句:用于构造函数之间进行相互调用

       this语句只能定义在构造函数的第一行,因为初始化有优先执行

   

/*
  this语句: 用于构造函数之间互相调用
  this语句只能定义在构造函数的第一行,因为初始化要优先执行
*/

class Person
{
	private int age;
	private String name;

	Person(int age)
	{
		this.age=age;
	}

	Person(int age,String name)
	{	
		//this.age=age;
		this(age);   //this 语句    即相当于  p(25)
		this.name=name;
	}

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


class  Test2
{
	public static void main(String[] args) 
	{
		Person p=new Person(25,"lilei");
		p.speak();		
	}
}

 

四:static关键字

       静态使用注意事项:

           ①静态方法只能访问静态成员

           ②非静态方法既可以访问静态也可以访问非静态

           ③静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所以静态不可以出现this

 

       静态什么时候使用:

           ①什么时候定义静态变量

              当对象中出现共享数据时,该数据被静态所修饰,对象中的持有数据要定义成非静态存在于堆

              内存中

           ②什么时候定义静态函数

              当功能内部没有访问到非静态数据那么该功能可以定义成静态的         

class StaticCode
{
	private String name="haha";
	//构造函数
	StaticCode()
	{
		System.out.println("a");
	}

	//静态代码块  (只要该类被加载就执行,而且只执行一次)
	static
	{
		System.out.println("b");
	}

	//构造代码块  (只要对象一创建就执行 优先于 构造函数)
	{
		System.out.println(this.name);
	}

	//构造函数
	StaticCode(String a)
	{
		System.out.println("d");
	}
}

class StaticDemo
{
	public static void main(String[] args)
	{
		new StaticCode("ab");  //输出:b  haha  d
 
		//new StaticCode();  //输出: b  c  a
		//System.out.println("--------");
		//StaticCode s=new StaticCode(5);//输出:c  d  
		//System.out.println("--------");
		//StaticCode s1=new StaticCode();//输出:c  a
	}
}

 五:java程序帮助文档的制作(javadoc命令)

class Help
{
	public static void main(String[] args)
	{
		int[] arr={3,25,23,65,20,11,22};
		int max=SortHelp.getMax(arr);
		System.out.println(max);
        
		SortHelp.printArr(arr);
		SortHelp.selectSort(arr);
		SortHelp.printArr(arr);
	}
}

/**
  这是一个进行数组相关操作的工具类,有查找最大值、最小值
  利用选择、冒泡方法来排序的方法和打印出数组的方法

  @author  bruthe
  @version  v1.0

*/

//生成帮助文档的类的权限必须的最大的  所以必须是public
public class SortHelp
{
	/**
	  这里对构造函数进行了私有化,使得该类不能被对象化
	*/
	private SortHelp()
	{
	}
	
	/**
	  这个函数的功能是输出数组的最大值
	  @param  arr  接受一个整形数组	
	   @return 返回一个数组的最大值
	*/
	public static int getMax(int[] arr)
	{
		int max=0;
		for(int x=0;x<arr.length-1;x++)
		{
			if(arr[x]>arr[max])
			max=x;
		}
		return arr[max];
	}

	/**
	  这个函数的功能是输出数组的最小值
	  @param  arr  接受一个整形数组	
	  @return 返回一个数组的最小值
	*/
	public static int getMin(int[] arr)
	{
		int min=0;
		for(int x=0;x<arr.length-1;x++)
		{
			if(arr[x]<arr[min])
			min=x;
		}
		return arr[min];
	}

	/**
	  这个函数的功能是利用选择排序的方法对数组进行排序
	  @param  arr  接受一个整形数组	
	*/
	public static void selectSort(int[] arr)
	{
		for(int x=0;x<arr.length-1;x++)
		{
			for(int y=x+1;y<arr.length;y++)
			{
				if(arr[x]>arr[y])
				{
					swap(arr,x,y);
				}
			}
		}
	}

	/**
	  这个函数的功能是利用冒泡排序的方法对数组进行排序
	  @param  arr  接受一个整形数组	
	*/
	public static void bubbleSort(int[] arr)
	{
		for(int x=0;x<arr.length-1;x++)
		{
			for(int y=0;y<arr.length-x-1;y++)
			{
				if(arr[y]>arr[y+1])
				{
					swap(arr,y,y+1);
				}
			}
		}
	}

	/**
	  这个函数的功能是对数组中的两个元素进行交换位置
	  @param  arr  接受一个整形数组	
	  @param  a    要交换位置的元素
	  @param      要交换位置的元素
	*/
	private static void swap(int[] arr,int a,int b)
	{
		int temp=arr[a];
		arr[a]=arr[b];
		arr[b]=temp;
	}
	
	/**
	  这个函数的功能打印出已知数组
	  @param  arr  接受一个整形数组	
	*/
	public static void printArr(int[] arr)
	{
		System.out.print("{");
		for(int x=0;x<arr.length-1;x++)
		{
			if( x!=arr.length-1 )
			{
				System.out.print(arr[x]+", ");
			}else
			{
				System.out.println(arr[x]);
			}			
		}
		System.out.print("}");
		System.out.println();
	}
}

   程序运行过程及结果:

   javadoc    -d  myhelp  -a  author  -v version  SortHelp.java

   这样程序就会在当期目录下生成 myhelp文件的关于SortHelp程序帮助文档

六:继承及抽象类

      因为父类的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行

      初始化的,所以子类在对象初始化时,要先访问一下父类中的构造函数

 

       如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定

      注意:super语句一定定义在子类构造函数的第一行

      结论:
           ①子类的所有的构造函数,默认都会访问父类中空参数的构造函数
               因为子类每一个构造函数内的第一行都有一句隐私super()

            ②当父类中没有空参数的构造函数时,子类必须手动通过super或者this语句形式来指定要访问

               的构造函数

           ③子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数
              子类中至少会有一个构造函数会访问父类中的构造函数

七:抽象类

       当多个类中出现相同功能,但是功能主题不同
       这时可以进行向上抽取,只抽取功能定义而不抽取功能主体

 

      抽象类的特点:
           ①抽象方法一定在抽象类中
           ②抽象方法和抽象类都由abstract关键字所修饰
           ③抽象类不可以用 new 创建对象,因为调用抽象方法没有意义
           ④抽象类中的抽象方法要被使用,必须由子类复写所有抽象方法后,再建立子类对象去调用
               如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类
               所以抽象类的子类必须全部复写该抽象类的全部抽象方法
           ⑤抽象类中也可以有非抽象方法
           ⑥抽象类是不可以实例化的(abstract只修饰类和方法)

abstract class Student
{
	//abstract不能和static一起修饰
	abstract  void study();
	abstract  void study1();
	void show()
	{
		System.out.println("show show ");
	}
}

class BaseStudent extends Student
{
	//抽象类的子类必须全部复写该抽象类的全部抽象方法
	void study()
	{
		System.out.println("base student");
	}

	void study1()
	{
		System.out.println("base1 student");
	}
}

class AdvStudent extends Student
{
	void study()
	{
		System.out.println("advanced student");
	}
	void study1()
	{
		System.out.println("advanced1 student");
	}
}

class AbstractDemo
{
	public static void main(String[] args)
    {
		AdvStudent a=new AdvStudent();
		a.study();  //程序输出: advanced student
	}
}

 八:final及接口

        final:最终,作为一个修饰符

        ① 可以修饰类、函数、变量
        ② 被final修饰的类不可以被继承
             为了避免被继承,被子类复写功能  可以在类前添加 final
        ③被final修饰的方法不可以被复写
        ④被final修饰的变量是一个常量 只能赋值一次,既可以修饰成员变量,也可以修饰局部变量
            final int y=4;          y=4;(错误的,只能赋值依次)

 

        接口:不可以创建对象,因为接口中有抽象方法
                  子类需要对接口中的所有方法进行覆盖后,子类才可以实例化,否则子类还是一个抽象类
 
        类可以实现多个接口,即java支持 "多实现"     接口间可以有继承关系  接口可以多继承
        class 修饰类   interface修饰接口(特殊的类)

interface InfA
{
	public static final int NUM=3;
	public abstract void show();
}

class Test implements InfA
{
	public void show()
	{
	}
}

class InterfaceDemo
{
	public static void main(String[] args)
	{
		Test t=new Test();
		System.out.println(t.NUM);     //输出:3
		System.out.println(Test.NUM);  //输出:3
		System.out.println(InfA.NUM);  //输出:3
	}
}

interface A
{
	public abstract void show1();
}
interface B
{
	public abstract void show2();
}

//接口间也是可以继承的  接口是可以进行多继承的,但是类不行
interface C extends A,B
{
}

 

                                       ------- android培训java培训、期待与您交流! ----------

 

分享到:
评论

相关推荐

    黑马程序员_Java基础辅导班教程课件[第01期]第15天

    总结来说,《黑马程序员_Java基础辅导班教程课件[第01期]第15天》的内容可能涉及了Java语言的核心概念,包括面向对象编程、控制结构、异常处理、文件I/O、集合框架以及内存管理等。通过深入学习和实践这些知识点,...

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    【Java基础辅导班教程...总之,"黑马程序员_Java基础辅导班教程课件[第01期]第13天"是一个全面覆盖Java基础的教程,结合课堂内容、视频、源码和图解,为学员提供了丰富的学习资源,助力他们稳步迈进Java开发的世界。

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02

    7. Criteria查询:除了HQL,Hibernate还提供了Criteria API,它提供了一种更加面向对象的方式来构建动态查询,使得查询更加灵活。 8. Native SQL查询:虽然Hibernate提供了面向对象的查询方式,但在某些特定场景下...

    黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi

    黑马程序员_毕向东_Java基础视频教程第05天-01-面向对象(概述).avi

    黑马程序员_Java基础辅导班教程课件[第01期]第14天

    接下来,学员将深入学习类与对象的概念,这是Java面向对象编程的核心。类是对象的模板,定义了对象的属性和行为;对象则是类的实例,可以进行具体的交互和操作。在Java中,通过关键字`class`来定义类,通过`new`...

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【描述】中提到的"( 01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip )" 暗示这门课程可能包含一系列视频教程,首个文件"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.avi"很可能是课程的开篇...

    黑马程序员_毕向东_Java基础源码.rar

    总结来说,"黑马程序员_毕向东_Java基础源码.rar"为初学者提供了一个深入学习Java编程的宝贵平台。通过学习和实践这些源代码,不仅可以巩固Java基础知识,还能培养良好的编程习惯和思维模式,为成为专业Java开发者...

    黑马程序员_Java基础辅导班教程课件[第01期]第11天

    "黑马程序员_Java基础辅导班教程课件[第01期]第11天"是一个专门为初学者设计的培训课程,旨在帮助学员深入理解和掌握Java的核心概念。这个课程可能是通过视频形式进行的,结合了理论讲解和实际操作,以便让学习者能...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4

    1.1 ORM概述:ORM是Object-Relational Mapping的缩写,它提供了一种将面向对象的编程模型与关系型数据库之间的映射机制,使得开发者可以使用面向对象的方式来操作数据库,避免了繁琐的SQL编写。 1.2 Hibernate概述...

    黑马程序员_Java基础辅导班教程课件[第01期]第5天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第5天"中,我们主要聚焦于Java编程语言的基础知识。这是一份专为初学者设计的教学资源,旨在帮助学员扎实地掌握Java编程的基本概念和技能。第5天的课程可能涵盖了变量...

    黑马程序员_Java基础辅导班教程课件[第01期]第8天

    1. **面向对象编程(OOP)**:Java是一门面向对象的语言,第8天的课程可能会重点讲解OOP的四大特性——封装、继承、多态和抽象。封装是隐藏对象的属性和实现细节,仅对外提供公共访问方式;继承允许一个类(子类)...

    黑马程序员_(适合初学者入门的Java基础视频)

    3. **面向对象编程**:深入讲解Java的核心特性——面向对象编程,包括类的定义、对象的创建与使用、封装、继承和多态等概念。 4. **数组和集合框架**:介绍数组的使用,以及ArrayList、LinkedList、HashSet、...

    黑马程序员_Java基础辅导班教程课件[第01期]第10天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    黑马程序员_Java基础辅导班教程课件[第01期]第6天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第6天"中,我们主要聚焦于Java编程语言的基础知识,这通常包括了变量、数据类型、运算符、流程控制语句等核心概念。此课程面向初学者,旨在为学员构建坚实的Java编程...

    黑马程序员_Java基础辅导班教程课件[第01期]第12天

    黑马程序员提供的"Java基础辅导班教程课件[第01期]第12天"旨在帮助学员深入理解Java语言的核心概念,进一步提升编程技能。在这个阶段的学习中,学员将接触到Java的高级特性以及实际应用。 首先,"day12"这个目录很...

    黑马程序员_Java基础辅导班教程课件[第01期]第7天

    1. **类与对象**:Java是一种面向对象的语言,因此理解类和对象的概念至关重要。类是对象的蓝图,定义了对象的属性(字段)和行为(方法)。而对象则是类的实例,具备类定义的所有特征和功能。 2. **封装**:封装是...

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    传智播客.黑马程序员《Java 基础入门》课后习题答案

    1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...

    黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)

    学习Java的面向对象编程概念,如类、对象、继承、多态等,以及异常处理和集合框架,是Android开发的前提。另外,Kotlin作为现代的Android开发语言,也被越来越多的开发者采用,其简洁的语法和安全特性使得编写代码...

Global site tag (gtag.js) - Google Analytics