Java学习笔记(04)

        Java学习笔记(04)

如有不对或不足的地方,请给出建议,谢谢!

一.对象

面向对象的核心:找合适的对象做合适的事情

面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物

面向对象:侧重于对象

1.类和对象的关系 :

           类是对同一类事物(对象)的抽象,对象是实际存在的该类的各种实体

 

创建的对象内存分析:

创建的对象存在栈区,开辟的内存空间存在于堆区,在堆区保存值

 

 

 

 

 

 

1. 成员变量和局部变量的区别

      位置:

           1.成员变量是在类中方法外。

           2.局部变量存在方法中

      作用域:

           1. 成员变量当前类中都可以使用

           2.局部变量只能在方法中使用

      初始化:

           1.成员变量默认有初始值

           2.局部变量要想使用必须初始化。

      生命周期:

           1.成员变量随着对象的创建而创建,随着对象的消失而消失

           2.局部变量出来方法的调用就消失

 

2.java中如何来找到对象

           1.自己定义好的类,必须知道这个类。

//属性 : 变量类型 变量名 = 值;
        String name;
        int  age;
        String sex;

 

           2.自定义类,通过这个类来创建出对象。

 

3.类的格式 :

           class 类名 {

  1. 属性(成员变量) :描述对象的公共特性。。

语法:数据类型 成员变量名

 

 方法:描述对象的公共行为。

语法:  普通方法:修饰符 返回值类型 方法名() {}

//方法
        // 修饰符 返回值类型  方法名(参数列表){}
        public void cry(){
                    System.out.println(name+"哭了");
        }

 

 

构造方法:修饰符 方法名() {} 在构造方法中,方法名和类名相同,无返回值类型

 

静态方法:static 修饰符 返回值类型 方法名() {}

           

 1 //静态方法名的创建:修饰符 static 返回值类型 方法名() {}
 2     public static void haha() {
 3         Demo de1 = new Demo();
 4         System.out.println(de1.name1 +"代码改变世界"); //报错
 5         System.out.println(Demo.name2 +"代码改变世界");
 6         de1.xixi();
 7     }
 8 /*
 9 1、静态方法中可直接调用静态变量,而不能直接调用普通变量;要想调用普通变量,创建对象来调用。 而且在Java中,允许静态方法中的对象名和主方法中的对象名相同
10 
11 2、在普通方法中可以直接调用静态变量和普通变量,但是,在主方法不能直接用类名调用方法,而是通过创建对象
12 
13 3、静态方法和普通方法的相互调用,都需要创建对象来完成。而且不能自己调用自己,否则造成死循环
14 */

 

 

 4.如何通过类创建对象:

           类名对象名 = new  类名();

Class Demo {
    Public static void main(String[] args) {
        Demo demo = new Demo();
                System.out.println("HelloWorld");    
    }
} 

 

5.设置属性

前提:必须有一个对象

语法:对象.属性名 = 值;

访问属性:对象.属性名

访问方法:对象.方法名();

 

 

2.匿名对象

1.匿名对象

没有名字的对象,不建议使用

 

class Person 
{
    String name;  //名字
    int age;      // 年龄
    }
}
class Demo3 
{
    public static void main(String[] args) 
    {
        new Person().name = "小红";
        new Person().age = 10;
        System.out.println(new Person().name);// null
    }
}

 

 

     2.匿名对象的使用注意点

           1.我们一般不会用匿名对象给属性赋值,无法获取属性值。

           2.匿名对象永远都不可能是一个对象。

     

     3.匿名对象的好处:书写简单

 

      4.匿名对象的使用场景

           1.如果一个对象需要调用一个方法一次的时候,就可以用匿名对象来调用。

           2.可以作为实际参数在方法中调用。

 

 

二.构造方法

在java中类似OC中的初始化方法叫构造方法

     1.OC初始化方法的特点 :

        1.可以在对象创建时初始化属性值。

        2.初始化方法只能被调用一次

//公有属性
    String name;
    int    age;
    //创建构造方法
    public Person(String n,int a){
        //给属性赋值
        name = n;
        age = a;
    }

 

  

     2.构造方法的作用 :

给对应的对象进行初始化,对象创建时初始化属性值。

 

 创建构造方法: 修饰符 类名(参数列表){} 

 

     3.构造方法使用注意点:

        1.方法名和类名保持一致

        2.构造方法没有返回值的。

        3.构造方法不是由我们手动调用的,而是在对象被    创建时由java虚拟机调用

        4.如果一个类我们没有给他定义构造方法,jvm在编 译的时候会给这个类默认

        添加一个无参的构造方法。

        5.如果你自己定义构造方法,jvm就不会在创建无参 的构造方法。这个时候需要

        自己定义一个无参的构造方法

 

//创键构造方法
    Baby(String n,String s,int a){ // 局部变量 :必须初始化
            //给属性赋值
            name = n;
            sex = s;
            age = a;
    }
    //参数的个数不一样。
    Baby(String n,String s){
        name = n;
        sex = s;
    }
    //和第一个对比参数的顺序不一样
    Baby(String s,int a,String n){
        name = n;
        sex = s;
        age = a;
    }

 

 

 

三.方法的重载

         在java中定义的方法是可以重名的,这种重名的方法也叫方法的重载。

 1 //创键构造方法
 2     Baby(String n,String s,int a){ // 局部变量 :必须初始化
 3     
 4             //给属性赋值
 5             name = n;
 6             sex = s;
 7             age = a;
 8     }
 9     //参数的个数不一样。
10     Baby(String n,String s){
11         name = n;
12         sex = s;
13     }
14     //和第一个对比参数的顺序不一样
15     Baby(String s,int a,String n){
16         name = n;
17         sex = s;
18         age = a;
19     }

 

     1.方法重载的使用注意事项:

           1.必须是方法名一样,才可以叫方法重载

           2.任何方法都可以实现方法的重载,包括构造方法、普通方法、静态方法

           3.必须要保证参数列表的参数的顺序或者个数不一样

 

      构造方法中是可以调用普通方法的

      在同一个类中,方法的调用直接拿到方法名调用就可以了,而在不同类中调用就会报错

 

 

 

四.代码块

1 //普通代码块
2 {
3         name2 = "正在学习";
4 }
5 //静态代码块
6 static {
7         name3 = "在慕课网学习";
8 }
9 //静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

 

作用:给对象统一初始化的值

位置:写在成员变量的位置上

 

1.构造代码块使用注意点:

           1.java中编译器编译一个java源文件的时候,会把成员变量的声明放在类的最前面。即使你是把它定义在类的最后面,运行的时候系统也会在类的最前面给它进行声明

   **2.在有构造方法的前提下:成员变量的初始化都是在构造方法中执行的。

           3.一旦经过java编译器编译后,那么构造代码块中的代码会移到构造函数中执行,而且会先于构造函数的代码块执行

           4.成员变量的显示初始化和构造代码块,按照当前代码的顺序来执行的,谁在后面就显示谁。

 

 

2.this 对象

      this : 代表所属方法 / 局部变量的调用对象,用来访问这个类的属性和方法。 和OC 中的self很象

 

 

*对象的引用变量(对象名)存在栈区,对象是存在于堆区,成员变量也随着对象存在堆区中

 

内存分析:

 

      this关键字的作用 :

  1. 如果成员变量和局部变量重名,在方法中时默认调用局部变量,通过this可以让方法调用成员变量

 

// this在成员变量中的使用
public Person (String name , int age){ 
        this.name = name; // 如果不适用this,两个name都是指的时局部变量的name,Java中的就近原则
        this.age =age;    

 

 

this关键字的使用注意点:

           1.存在与成员变量同名的局部变量时:方法内部会访问局部变量(否则java采用就近原则)

           2.在方法中不存在和成员变量同名的局部变量时:java编译器在编译时会默认给变量前面加一个this.

    3.通过this实现构造方法中调用构造方法

构造方法中也可以调用普通(实例)方法

 

 

五.调用构造方法

语法: this(参数);

 

构造方法 / 函数什么时候调用:创建对象的时候有jvmJava虚拟机)调用

//直接用方法名来调用方法  调用的是普通方法。,不能将这个方法做为构造方法。
        //Student(name,id,classNum,sex); //错误
//这个的原理和上面的一样,如果没有this,系统会自动添加this调用的
        //this.Student(name,id,classNum,sex);  错误的。

//正确的构造方法中调用构造方法
        this(name,id,classNum,sex);  // 必须是第一个语句
        this.age = age;

 

2.调用构造方法的注意点:

     1.this的调用必须在构造方法的第一句(否则会报错)

       2.不要相互调用构造方法(死循环),在自己的方法中调用自己也是一样

       3.在调用构造方法时,同时给被构造方法进行赋值,否则为系统的默认值

       4.不能直接用方法名调用构造方法

 

posted @ 2016-11-16 19:51  夏小天&  阅读(397)  评论(3编辑  收藏  举报