Java第五章:面对象基础

注:这是自己在学习Java的过程中做的一些简要学习笔记和自己觉得容易错和需要记忆的一些内容

 

 1.面向对象与面向过程:
    面向过程:面向过程就是分析出解决问题所需要的步骤,即注重实现功能的因果关系也注重实现这个功能的步骤,分为第一步做什么,第二步做什么等等多个步骤,然后用函数把这些步骤一步一步实现, 使用的时候一个一个依次调用就可以了;(耦合度高,可扩展性差)

    面向对象:面向对象是把构成问题事物分解成各个对象,首先分析这个问题事物里面有哪些类和对象,然后再分析这些类和对象应该具有哪些属性和方法,最后分析类和类之间具体有什么关系。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象的思想就是把一切都看成对象,而对象一般都由属性+方法组成。(耦合度低,可扩展性高)

    属性:对象具有的各种静态特征——有什么;  
    方法:对象具有的各种动态行为——能做什么。                                                                                                                             
 2.类与对象:
    万物皆对象;
    它包括现实中客观存在的事物,也包括抽象的事物,对象都是类的实例,而类是对象的抽象,即对象会占内存空间,而类不占内存空间;
    在面向对象编程语言中,任何对象都可以归为一类,只不过归类的方法存在差异;
    凡是通过new运算符创建出来的对象,都存储在堆空间中,new运算符的作用就是在堆中开辟一块空间;

    类(class)是Java 语言的最小编程单位,在项目中,一个类以一个源文件体现;
    类是具有相同属性和方法的一组对象的集合,类定义了对象将会拥有的特征和行为,即属性和方法;
    要想得到“对象”,必须先定义“类”,“对象”是通过“类”这个模板创造出来的,通过“类”创造“对象”的过程称为实例化。

 3.方法 method(在C语言中叫函数):
    语法格式:
     [访问修饰符] 返回值类型 方法名 (参数列表){
    方法体;
     }

    可以完成某个特定的功能并且可以重复利用的代码片段;
    方法是一个封装的概念,把一些个功能封装在方法里面,我们不需要去关注方法的实现。只要调用方法,则程序会去执行到方法里面的功能代码,这样的话可以增强代码复用性;
    一般一个方法就是一个功能单元,在以后的开发中,某个功能可以独立抽取出来建议定义为方法,就是一个方法只完成一个功能。

 4.方法调用:
    在方法只是写好未调用的时候,存储在方法区;
    在方法调用的时候,该方法需要的内存空间在栈中分配(压栈、弹栈),所占内存包括方法运行所需内存以及存储方法的局部变量;
    除static静态方法外,main方法最先执行,并最后要结束,main方法结束则整个程序结束;
    A类中有一个x方法,在x方法中想调用B类中的y方法,则必须先创建B类的对象,再用对象名.y()来进行调用。
  
 5.成员变量与局部变量:
    局部变量:方法体内声明的变量,方法调用结束后变量所占内存清空;
    成员变量:方法体外声明的变量,可以不用手动赋值,系统自动赋默认值,相当于属性;
    成员变量分为实例变量和静态变量(由static修饰);
      
      解释:class Text{
                     //成员变量中的实例变量
                     int i;
                     //成员变量中的静态变量
                    static int k;
               }

    局部变量与成员变量可以同名,在使用时,局部变量有更高的优先级。

 6.参数的传递方式以及存储方式:
    值类型的传递的方式是值传递,在方法中改变变量的值,调用时所传递的变量的值是不会有影响的;
    引用类型传递的是此对象的地址,叫址传递。当在方法中改变这个对象的属性值时,调用方法时所传递的对象的属性值也会改变。
    
     jvm的内存空间:

      1 栈内存:  值类数据类型 (动态区:局部变量)                          2 堆内存:  引用数据类型 (实例变量)
       arrays[]  →  0x 2365aa                                  →                                                         10
       a            →       5                                                                                                         20
      
      3 方法区    存储代码片段 (静态区:静态变量)                           4 常量池 

      类需要加载,所以方法区最先有数据 ;
      引用类型的数据存储在堆空间,但是会在栈空间存储这个对象的变量名(实际上就是存储在堆空间的数据的地址)。


 7.return语句与break语句:
    break表示跳出循环,而return表示终止当前的方法而不是整个程序结束,两者都为就近原则来结束循环或者方法;
    在同一个作用域中,return语句之后不能编写其他代码,编写之后编译报错;
    如果调用的方法需要返回值,那么return返回语句必须确定可执行。
    
      解释:public static void main(String[] args){

                 }
                 //错误:缺少返回语句
                 public static int m(){
                             booleam flag = ture;       //编译器不负责运行程序,且认为每条语句相互独立

                             //对于编译器来说,它只知道flag变量是booleam类型
                            //在if语句进行条件判断时,会认为flag可能是ture或者false

                            if(flag){
                                return 1;    //所以编译器会认为这行代码可能执行也可能不执行
                            }
                   } 

  8.方法重载
     在同一个类中,出现了多个名字相同的方法,实现相似功能;
     特点:
      在同一个类,名字相同;
      对参数有严格要求,即参数数量不同,参数的类型不同,当参数数量、类型相同,参数顺序不同也成立;
      不可以根据方法的返回值不同来实现重载;
     方法重载的调用不需要特别指定,编译器会自动匹配最合适的方法。

  9.构造方法:
     作用:创建表对象,以及完成实例变量的初始化(初始化对象);
     构造方法无返回值,构造方法名与类名一致;
     语法格式:
      [访问修饰符] 构造方法名 (参数列表){
             构造方法体;
      }

     构造方法不能由程序员显示调用,由关键字: new 来调用;

       解释:Student student = new Student();    //这个new关键字后面的就是构造方法;

     实例变量没手动赋值时,系统会默认赋值,是在构造方法执行的过程中完成初始化的;    
     当类中没有定义任何构造方法,系统会默认提供一个无参的构造方法(缺省构造器);
     如果定义了一个或者多个有参或无参构造方法,则不会自动添加默认构造方法,建议手动添加无参构造方法;

       解释:public 构造方法名(){    //系统默认的无参构造方法
                  //看起来没代码片段,实际上已经行实例变量默认赋值初始化
                  }

  10.static与this:
     static:
      static修饰的变量和方法为静态变量静态和静态方法;
      静态变量在类加载的时候就会被初始化;
      静态变量为类级别,实例变量为对象级别:
    
        解释:class VarTest{
                         //以下实例的,都是对象相关的,访问时采用“引用.”的方式访问,需要先new对象,可能存在空指针异常

                        //成员变量中的实例变量
                        int i;
                        //实例方法
                        public void m1(){

                        }

                        //以下是静态的,都是类相关的,访问时采用“类名.”的方式访问,不需要new对象,不可能存在空指针异常

                       //成员变量中的静态变量
                       static int k;
                      //静态方法
                      public static void m2(){

                      }
              }

      变量声明:在某个类中,所有对象的某个属性都是一样的,它只有一个,所有的对象共享这些数据,则定义为类级别特征,定义为静态变量,存储在方法区,只开辟一份空间用来存储,不会浪费内存空间;
      静态代码块(由static修饰):
        语法格式:
         static{
               代码片段;
         }

        在类加载时执行并只执行一次,且无论在main方法前还是后都在main方法执行之前自上而下的顺序执行;
        静态代码块与静态变量执行时都有先后顺序;

          解释:public class Text{
             //静态变量:类加载时初始化
            static int i = 100;
            //静态代码块:类加载时执行
            static{
                //这里可以访问i
                System.out.println(i);
            }

            //程序入口
            public static void main(String[] args){
                System.out.println("main begin");
            }
            }

           输出结果:100
                     main begin

    
     this:
      是一个变量,是一个引用,存储在堆内存当中对象的内部;
      保存当前对象的内存地址,指向自身;
      只能使用在实例方法中,谁调用这个实例方法,this就代表谁,即代表的就是“当前对象”;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值