java--面向对象(2)--黑马程序员

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

面向对象(2)

主要内容:《  构造方法、成员方法、static关键字、静态的成员方法、 static的注意事项 》

1 构造方法概述和格式

1.构造:实例化一个对象;new

2.方法:指的是某一个方法。

构造方法:跟构造相关的方法:

当我们"实例化"一个对象时,使用的语法:

Student stu = new Student();

后边的一对小括号就意味着调用了某个方法,这个方法就叫:构造方法;

我们之前都没有定义过构造方法,那时是系统自动为我们添加的;

自己定义构造方法:

语法要求:

1.构造方法的"方法名"必须和"类名"相同;

2.构造方法不能定义"返回值类型",甚至是void;

构造方法的格式:

1.构造方法的方法名必须与类名相同;

2.不能定义返回值类型,甚至是void;

3.构造方法内部不能返回任何值。但可以写return;语句;表示:结束构造方法的执行

 1 class Student{
 2
 3          //定义普通的方法:
 4
 5          void show(){
 6
 7          }
 8
 9          //定义构造方法
10
11          //如果我们程序员没有定义构造方法,编译器会自动为这个类添加一个构造方法:没有形参,里面什么都不做。
12
13          //当我们实例化这个类对象时,虚拟机就会自动调用这个构造方法。
14
15 /*       Student(){
16
17          }
18
19 */
20
21          //我们可以自己定义一个构造方法,当再实例化这个类的对象时,将会调用这个构造方法。
22
23          Student(){
24
25                    System.out.println("你构造了一个Student......");
26
27          }
28
29 }
30
31 class Demo {
32
33          public static void main(String[] args)
34
35          {
36
37                    Student stu = new Student();
38
39          }
40
41 }

2 构造方法的作用

1.由于它是在实例化一个对象时,被调用。    一般它内部可以做一些"初始化"的工作,和其它一些"先期的准备工作"。

2.理解构造方法的作用:

给了我们一个机会,在实例化一个类对象之前,如果想做什么事情,就可以将代码写在"构造方法"里。这个方法每当实例化一个此类对象时,会被调用.

 1 class Student{
 2
 3          String name;
 4
 5          int age;
 6
 7          char sex;
 8
 9 //定义一个构造方法,做一些初始化的操作。这个构造方法将会在每次实例化这个对象时被调用;
10 Student(){
11         name = "";
12         age = 20;
13         sex = ‘男‘;
14         System.out.println("构造了一个Student对象......");
15     }
16 }
17 class Demo {
18     public static void main(String[] args) {
19         Student stu = new Student();
20         System.out.println(stu.name);
21         System.out.println(stu.age);
22         System.out.println(stu.sex);
23         Student stu2 = new Student();
24         Student stu3 = new Student();
25         Student stu4 = new Student();
26         Student stu5 = new Student();
27     }
28     }

3  构造方法的重载及注意事项)—

构造方法的注意事项:

1.如果我们不定义构造方法,系统添加一个:无参,什么都不做;

2.如果我们定义了构造方法,那么系统将不再添加无参构造方法了;

3.构造方法也是可以"重载":

构造方法重载的作用:

1.意味着这个类,可以使用多种方式构造;方便使用者来构造对象;

2.当我们实例化一个对象时,只能调用一个构造方法;其它构造方法将不会被调用;

   3.构造方法重载,实际上为这个类提供了一定的"灵活度";

 1 class Student
 2 {
 3     private String name;
 4     private int age;
 5     private char sex;
 6
 7     //构造方法时可以进行重载的;
 8     Student(){
 9         System.out.println("无参的构造方法......");
10     }
11     Student(int n){
12         System.out.println("int的构造方法...... n = " + n);
13     }
14     Student(String name){
15         System.out.println("String的构造方法...... name = " + name);
16     }
17 //全参的构造方法
18     Student(String name,int age ,char sex){
19         this.name = name;
20         this.age = age;
21         this.sex = sex;
22     }
23 //提供一些get和set方法
24     void setName(String name){
25         this.name = name;
26     }
27     String getName(){
28         return this.name;
29     }
30     void setAge(int age){
31         this.age = age;
32     }
33     int getAge(){
34         return this.age;
35     }
36     void setSex(char sex){
37         this.sex = sex;
38     }
39     char getSex(){
40         return this.sex;
41     }
42 }
43 class Demo {
44     public static void main(String[] args) {
45         //调用无参的构造方法;
46     //    Student stu = new Student();
47         //调用int参数的构造方法
48     //    Student stu2 = new Student(20);//传递实参
49         //调用String参数的构造方法
50     //    Student stu3 = new Student("刘德华");
51         //***********构造方法的作用*********
52         //之前我们可以通过set方法为成员属性赋值
53         Student stu = new Student();
54         stu.setName("刘德华");
55         stu.setAge(20);
56         stu.setSex(‘男‘);
57         //使用带参的构造方法
58         Student stu2 = new Student("张学友",20,‘男‘);
59     }
60 }

4 成员方法的分类及使用-一个标准的学生类

成员方法的分类:

成员方法:定义在类体中,跟我们之前讲过的"方法"是一样的。可以带参数,可以具有返回值;

成员方法的特点:必须要通过类的对象调用。必须先期实例化此类对象,因为只有实例化对象后,方法的空间才会被分配。

Student stu = new Student();

stu.show();

//不能直接调用show()

show();//错误。show()在Student类的内部,不能这样直接调用;

//不能通过类名调用:

Student.show();//错误:不能用"类名"调用;

分类:

1.无返回值,无形参;

2.有返回值,无形参;

3.无返回值,有形参;

        4.有返回值,有形参;

 1 class Student{
 2     //私有的成员属性
 3     private String name;
 4     private int age;
 5     private char sex;
 6     //*********构造方法*********
 7     //无参的
 8     Student(){
 9     }
10     Student(String name,int age,char sex){
11         this.name = name;
12         this.age = age;
13         this.sex = sex;
14     }
15 //一些get和set方法
16     void setName(String name){
17         this.name = name;
18     }
19     //有返回值,无形参
20     String getName(){
21         return this.name;
22     }
23     //无返回值,有形参
24     void setAge(int age){
25         this.age = age;
26     }
27     int getAge(){
28         return this.age;
29     }
30     void setSex(char sex){
31         this.sex = sex;
32     }
33     char getSex(){
34         return this.sex;
35     }
36     //无返回值,无形参
37     void show(){
38         System.out.println("大家好,我叫:" + this.name + ",性别:" + this.sex + ",今年:" + age + " 岁!");
39     }
40     //有返回值,有形参:
41     String toString(int n){
42         System.out.println("n = " + n);
43         return this.name;
44     }
45 }
46 class Demo {
47     public static void main(String[] args)
48     {
49         Student stu = new Student();
50         stu.show();//OK的;
51
52         show();//编译错误
53         Student.show();//编译错误
54     }
55 }

5 static关键字

static关键字:

1.static:静态的——全局的——整个应用程序范围内。

2.有些成员变量具有固定的值,一般不会更改。

如果它作为"普通成员变量":意味着,每次实例化这个对象时,都会在堆中分配空间。所以,如果对象

多了后,就会造成"空间浪费";

3.这时,我们可以将这种变量定义为:static

 1 class Student
 2 {
 3     static String schoolName = "传智播客--北京校区";
 4     String name;
 5     int age;
 6
 7     Student(String name,int age){
 8         this.name = name;
 9         this.age = age;
10     }
11 }
12 class Demo
13 {
14     public static void main(String[] args)
15     {
16         Student stu = new Student("刘德华",20);
17         System.out.println("第一个学员打印:" + stu.schoolName);
18
19         stu.schoolName = "传智播客";//此值是共享的,只有一个存储空间。
20
21         Student stu2 = new Student("张学友",22);
22         System.out.println("第二个学员打印:" + stu2.schoolName);
23     }
24 }

6  static关键字的特点

静态属性的应用:

1.我们以后做项目时,总会有一些成员属性的值,在整个应用程序范围内是唯一的,

而且被整个应用程序共享。

例如:schoolName = "传智播客--北京校区";

2.我们可以将这种字段全部定义在某个类中,并声明为static的。

 1 class Const
 2 {
 3     static String schoolName = "传智播客--北京校区";
 4     //我们的整个应用程序需要经常的计算圆的面积,需要使用统一的π值
 5     static double pi = 3.14159;
 6 class Student{
 7     String schoolName  = Const.schoolName;
 8     //例如此方法要计算圆的面积
 9     void cal(){
10     Const.pi * 半径 的平方
11     }
12 }
13 class Teacher{
14     String schoolName = Const.schoolName;
15 }
16 class Demo {
17     public static void main(String[] args) {
18         System.out.println("Hello World!");

7 静态的成员方法以及特点

静态关键字的特点:

1.随着类的加载而加载;

2.优先于"对象"而存在;在没有任何此类的对象的情况下,就已经存在了;

3.被类的所有对象共享。也可以被其它类访问;

4.可以通过"类名"调用。也可以通过"对象名"调用;

 1 class Const{
 2     static String schoolName = "传智播客--北京校区";
 3     static double PI = 3.14159;
 4 }
 5 class Demo {
 6     public static void main(String[] args) {
 7 //    Const con = new Const();//第一new这个类的对象,也会先将静态成员分配空间
 8
 9 System.out.println(Const.schoolName);//第一次使用Const类时,会自动加载内部所有的"静态成员",并分配空间
10 System.out.println(Const.schoolName);//直接在内存中取System.out.println(Const.schoolName);//直接在内存中取
11     Const con = new Const();
12     System.out.println("con打印:" + con.schoolName);
13     }

静态的成员方法(类方法):

1.一个成员方法也可以被修饰为static(静态的)

2.一般一些"功能性"的方法:例如我们上午写的MyMath类中的加减乘除的一些方法

为了方便用户使用,我们可以将这些方法定位为:static。

3.用户使用时,可以不用实例化此类的实例,直接使用类名就可以调用了。

静态方法的应用:

1.我们以后做项目时,都会有一些"工具性"的方法:

例如:加、减、乘、除的方法;

对数组操作的一些方法:打印数组的内容,找数组中的最大值、最小值;

2.我们可以将这些"工具性"的方法定义在某个类

使用户可以通过"类名"就可以直接调用了,不需要实例化此类的对象,方便了用户使用;

 1 class MyMath{
 2
 3          //此方法就可以不通过对象调用。可以通过类名直接调用。
 4
 5          static int add(int a ,int b){
 6
 7                    return a + b;
 8
 9          }
10
11 }
12
13 class Demo {
14
15          public static void main(String[] args)        {
16
17 //想使用add方法,必须先实例化一个MyMath对象;
18
19          //       MyMath m = new MyMath();
20
21          //       System.out.println(m.add(10,20));
22
23                    //通过类名直接调用静态方法
24
25 System.out.println(MyMath.add(100,20));

8  static的注意事项

static关键字的小结和注意事项:

1.static可以修饰:

1).成员变量:存在静态存储区。被所有对象共享;

2).成员方法:存在静态存储区。被所有对象共享;

2.static关键字的特点:

1.随着类的加载而加载;

2.优先于对象而存在;

3.被所有类的对象共享;

4.可以通过"类名"调用,也可以通过"对象名"调用;

static关键字的注意事项:

1.在static的方法中,不能使用this关键字;(因为此时还没有对象空间产生)

2.静态方法,只能访问静态成员(静态成员变量和静态成员方法)

普通的成员方法:

普通的成员变量

普通的成员方法

静态的成员变量

静态的成员方法

静态的成员方法:

静态的成员变量

静态的成员方法

class Student
{
    static String schoolName = "传智播客--北京校区";

}
class StudentTools
{
    void show(){
        Student stu = new Student();
    }
}
class  Demo
{
    public static void main(String[] args)
    {
        int a = 10;
    }
}

9  静态变量和成员变量的区别

静态变量和成员变量的区别:

1.所属不同

1).静态变量:属于某个类,又叫"类变量"。

2).成员变量:属于"对象",每个对象都有独立的成员变量的空间。也叫"实例变量";

2.内存中位置不同:

1).静态变量:在方法区的"静态存储区"中;

2).成员变量:在"堆"中;

3.在内存中出现时间不同:

1).静态变量:第一次使用这个类时,可能还不会产生对象。此时就会为静态变量分配空间;

2).成员变量:在实例化类对象时,才会分配空间;

4.调用不同:

1).静态变量:可以通过"类名"访问。也可以通过"对象"访问;

2).成员变量:必须要通过"对象"访问;

 1 class Student{
 2     static String schoolName = "传智播客--北京校区";
 3     String name = "刘德华";
 4 }
 5 class Demo{
 6     public static void main(String[] args)
 7     {
 8         System.out.println(Student.schoolName);//可以通过类名访问
 9         //访问成员变量:name
10         Student stu = new Student();
11         System.out.println(stu.name);//必须通过对象名访问
12         System.out.println(stu.schoolName);//也可通过对象名访问。
13     }
14 }

10 main方法的格式详细解释

public static void main(String[] args)

public :表示"公有的",任何类都可以访问的;

static :表示"静态的",在不存在Demo的对象的情况下就可以直接访问;

void   :返回值类型为"空"。

main   :方法名,不是关键字。

形参:String[] args:字符串数组。用于执行这个main方法时,传入参数;

11 说明书的制作过程

此类用于封装一些对数组进行操作的一些方法

要对此类制作帮助文档:

1.类要被声明为public;

2.在源文件中添加"文档注释";/**开头 * /结束。只有"文档注释"中的内容才会被编译到帮助文档中。

3.对"类"和"方法",以及方法的参数和返回值进行详细说明;

4.在"命令提示符"下使用javadoc命令,生成帮助文档:

javadoc -d 目录名  -author -version ArrayTools.java

-d:使用目录;

目录名:会将生成的帮助文档存入到这个目录下

-author:识别@author标记;

-version:识别@version标记:

 1 */
 2 /**
 3     一个对数组操作的类。包含了一些静态的方法。
 4     @author 作者名
 5     @version 1.0
 6 */
 7  public class ArrayTools
 8 {
 9     //由于是一个工具类,内部包含都是静态方法。所以也不需要构造了。
10 private ArrayTools(){
11     }
12     //查找数组的最大值
13     //参数:
14     //返回值:
15     /**
16         获取数组的最大值。
17         @param array 要查找的数组
18         @return max 数组中的最大值
19     */
20 public static int getMax(int[] array){
21         int max = array[0];
22         for(int i = 0;i < array.length ;i++){
23             max = array[i] > max ? array[i] : max;
24         }
25         return max;
26     }
27     //查找数组的最小值
28     /**
29         获取数组的最小值
30         @param array 要查找的数组
31         @return min 数组中的最小值
32     */
33     public static int getMin(int[] array){
34         int min = array[0];
35         for(int i = 0;i < array.length ;i++){
36             min = array[i] < min ? array[i] : min;
37         }
38         return min;
39     }
40 }
时间: 2024-10-17 02:55:20

java--面向对象(2)--黑马程序员的相关文章

黑马程序员_关于黑马java班入学测试技术分享-后五(二)

??????????????????????????????????????????????????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). 本文只要是讲述黑马程序员基础测试题的6-10题,回过头来分析明显

黑马程序员_Java面向对象思想

面向对象要把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法 . 1.人在黑板上画圆 对于这个设计,上面有Person, Blackborad , Circle三个对象 动词 : 画 因为画的动作的数据:坐标(x,y),半径(randius) 是Circle拥有的数据,所以 draw()方法应该属于Circle对象,而不是动作的发出者Person. 注意:[动作发出者往往会委托动作承受者 ] 2.司机紧急刹车 对于这个设计,上面有Driver, Car两个对象 动词 : 刹车 因为刹

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

黑马程序员____第一阶段Java开发前奏(1)

  黑马程序员____第一阶段Java开发前奏(1) ⒈软件开发:        软件是由一系列按照特定顺序组织的计算机数据和指令的集合,软件开发就是制作软件.软件的出现实现了人与计算机之间的交互.    ⒉人机交互方式:        图形化界面和命令行方式,图形化界面简单直观,使用者易于接受,容易上手操作.命令行方式需要有一个控制台,输入特定的指          令,让计算机完成一些操作,较为麻烦,需要记住一些命令.    3.常用的DOS命令:     dir:列出当前目录下的文件以及文

黑马程序员–Java之多线程09

黑马程序员–Java之多线程09 一.线程和进程 在Java中,并发机制非常重要,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程.多线程就是指一个应用程序中有多条并发执行的线索,每条线索都被称作一个线程,它们会交替执行,彼此间可以进行通信.多线程是非常复杂的机制,在每个操作系统中的运行方式也存在差异,window操作系统是多任务操作系统,它以进程为单位.一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程,也就是正在执行的程序.系统

黑马程序员——java基础——异常

黑马程序员--java基础--异常 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 异常 就是不正常.程序在运行时出现的不正常情况.其实就是程序中出现的问题.这个问题按照面向对象思想进行描述,并封装成了对象.因为问题的产生有产生的原因.有问题的名称.有问题的描述等多个属性信息存在.当出现多属性信息最方便的方式就是将这些信息进行封装.异常就是java按照面向对象的思想将问题进行对象封装. 异常体系 --------java.lang.Thro

黑马程序员-面向对象的特征

Java面向对象 面向对象是一种程序设计方法,或者是程序设计规范,其基本思想是使用对象.类.继承.封装.多态等基本概念来进行程序设计. 面向对象是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者 完成需求时: ? 先要去找具有所需的功能的对象来用. ? 如果该对象不存在,那么创建一个具有所需功能的对象. ? 这样简化开发并提高代码的复用. 面向对象的开发过程其实就是不断的创建对象,使用对象,指挥对象做事情.设计的过程其实就是在管理和维护对象之间的关系. 面向对象

黑马程序员-java 7K面试题之交通灯管理系统

------- android培训.java培训.期待与您交流! -------- 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1. 异常随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往南向的车辆----右转车辆 由东向而来去往南向的车辆----左转车辆 .......  ...... 2. 信号灯忽略黄灯,只考虑红灯和绿灯. 3. 应该考虑左转车辆控制信号灯,右转车辆不受信号灯控制. 4. 具体信号灯控制逻辑与现实

黑马程序员-java 7K面试题之银行业务调度系统

------- android培训.java培训.期待与您交流! -------- 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 1. 银行有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 2. 有三种对应类型的客户:VIP客户.普通客户.快速客户(办理如交水电费.电话费之类业务的客户). 3. 异步随机生成各种类型的客户,生成各类型用户的概率比率为: VIP客户:普通客户:快速客户=1:6:3 4. 客户办理业务所需时间有最大值和最小值,

黑马程序员------Java反射学习总结(一)

-------------------------Java培训.Android培训,期待与您交流!----------------------------- 一.反射的概念 1) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 2)一句话来讲,反射就是将Java类中的各个成分映射成相应的Java类. 3)即在Java中,描述事物的各种