博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java_oop_方法2
阅读量:6590 次
发布时间:2019-06-24

本文共 4890 字,大约阅读时间需要 16 分钟。

基本和引用数据类型

    存储方式
    数据类型总结
    jvm运行时数据区域
        方法区
        虚拟机栈!
        本地方法栈
        堆!
        程序计数器
        虚拟机栈
            其中存放了编译器可知的基本类型和对象引用,还有returnAddress
        堆
            jvm规范规定:所有的对象实例以及数组都在这里分配内存

基本数据类型没有方法,引用数据类型有方法

 

 

方法的传参方式

形参不影响实参  值类型
参数是基本数据类型:传值
形参影响实参     引用类型
参数是引用数据类型:传址
形参不影响实参  字符串类型
参数是String需要考虑其不可变性

 

package com.fgy.java8se;class User{    int age=20;}public class Demo7 {    void m1(int i){        i++;        System.out.println(i);    }    void m2(User user){        user.age++;        System.out.println(user.age);    }    void m3(String ss){        ss+="abc";        System.out.println(ss);    }    public static void main(String[] args) {                //形参不影响实参  值类型        //参数(形参与实参)是基本数据类型:传值(按值传递),拷贝一份        int j=0;        Demo7 demo=new Demo7();        demo.m1(j);        System.out.println(j);                //形参影响实参     引用类型        //参数是引用数据类型:传址        System.out.println("-----------------");        User user=new User();        user.age=30;        demo.m2(user);        System.out.println(user.age);                //形参不影响实参  字符串类型        //参数是String需要考虑其不可变性        System.out.println("-----------------");        String s="123";        demo.m3(s);        System.out.println(s);    }}

 

变量的作用域

    作用域的概念
    局部变量与成员变量
    
    作用域:scope 有时也叫visibility可见性,是指变量能够被访问的代码块
    
    局部变量
    局部变量是指定义在方法,构造方法或代码块中的变量,也包括方法的参数。其作用域较小
    特点:
        没有初始化的值
        赋值之前不能访问
        可以声明在方法体的任意地方,只要在使用之前就可以
        局部变量可以与成员变量同名
        
        先去找局部变量,再去找成员变量,就近原则
    成员变量
    成员变量是指声明在类中的属性,可以在类的任何位置访问到,可以认为是成员变量

package com.fgy.java8se;public class Demo8 {    int aa=50;    void m1(){        int num1=10;        //这里就可以访问成员变量aa        System.out.println(aa);    }    //局部变量,不能访问另一个方法的num1    void m2(){        //System.out.println(num1);    }    public static void main(String[] args) {        for (int i = 0; i < 10; i++) {            System.out.println(i);        }        //局部变量,不能访问for中的i        //System.out.println(i);        if (1==1) {            int num=10;        }        //局部变量,不能访问if中的num        //System.out.println(num);    }}

 

 

static关键字

    static关键字概述及其使用场景
    static变量
    static方法
    static导入
    static代码块
    
    使用场景
        属性
        方法
        导入
        代码块
        内部类(后续课程介绍)
        
    static变量
        该变量属于类,一般称为类变量
        所有实例共享该变量的值
        使用类直接访问
        不可直接将非静态变量赋值给静态变量
    static方法
        也称为类方法(普通方法称为实例方法)
        一般是工具类中的方法
        使用类直接访问
        不能直接访问非静态变量或方法
    static导入
        用于导入类中的静态方法和静态属性    
        import static 包名.m1;
        然后直接调用,不用类名.m1来调用了        
    static代码块
        类的组成部分之一    类由属性,方法,代码块,静态代码块,内部类组成。
        实例化之前执行
        只会执行一次
        框架或设计模式时会用到,一般不用

 

package com.fgy.java8se;public class Demo9 {    //下面的成员变量(也叫属性)要通过它所归属的类实例化,打点引用访问    int num;        static int num1;    //不可将非静态变量赋值给静态变量    //static int num2=num;        void m(){        //static int num3=10;    }        public static void main(String[] args) {        //下面实例化后,就可以调用了,每个实例化后的对象各不相干        Demo9 d1=new Demo9();        d1.num=10;        //用对象打点来调用没有问题        d1.num1=80;            Demo9 d2=new Demo9();        d2.num=20;        //用对象打点来访问没有问题        d2.num1=60;        //但最好用类打点的方式来访问,因为它是一个静态成员变量        Demo9.num1=50;        System.out.println(d1.num+","+d2.num);        System.out.println(Demo9.num1+","+d1.num1+","+d2.num1);    }}

 

package com.fgy.java8se;//静态导入//import static com.fgy.eclipse.Fish.swim;import static com.fgy.eclipse.Fish.*;public class Demo10 {        //代码块,这是实例化对象时最后执行的,执行多次    {        System.out.println("jjjj");    }    //静态代码块,这是实例化对象时最先执行的,只执行一次    static{        System.out.println("hello");    }        static void m1(){        for (int i = 0; i < 5; i++) {            System.out.println(i);        }    }    public static void main(String[] args) {        //同一个类中,静态方法调用静态方法,直接调用        m1();        swim();        Demo10 d1=new Demo10();        Demo10 d2=new Demo10();        Demo10 d3=new Demo10();    }}

 

构造方法的概念

构造方法的语法特征与特点
构造方法的使用
    
    构造方法是在创建对象后立即初始化对象的命名代码块
    方法名与类名完全一致
    不能有返回值类型
    没有显式构造方法时,编译器会提供一个默认的无参构造方法,其访问控制修饰符与类一致
    一旦提供显式的构造方法时,就没有默认的构造方法
    构造方法由new或其它构造方法调用(this和super关键字时会讲到其它构造方法的调用)
    只有两个判断标准,有没有返回值类型,方法名与类名是不是相同
    
    使用构造方法初始化对象的属性值
    无参的构造方法通过new来实例化,调用赋值通过打点来实现
    有参的构造方法通过new来传递实参到方法中,方法中进行赋值

 

package com.fgy.java8se;public class Demo11 {    //方法名与类名完全一致    //不能有返回值类型    //没有显式构造方法时,编译器会提供一个默认的无参构造方法,其访问控制修饰符与类一致    //一旦提供显式的构造方法时,就没有默认的构造方法    //下面的没有返回值类型void,方法名与类名一致Demo11,默认提供一个无参的    //构造方法,访问控制修饰符与类一致。是一个默认的无参构造方法/*    public Demo11(){            }    */    public Demo11(int age,String name){//        age=age;//        name=name;        //上面的两个没什么意义,我们的本意是将形参赋给成员变量,所以这里就要用到this        this.age=age;        this.name=name;    }    int age;    String name;        public static void main(String[] args) {        //构造方法由new或其它构造方法调用        //无参的构造方法与有参的构造方法,如果两种都提供,就叫做方法的重载        //通过有参的构造方法为对象赋初始值        Demo11 d1=new Demo11(40,"ni");        System.out.println(d1.age+" "+d1.name);        //下面是为无参的构造方法赋值/*        d1.age=20;        d1.name="aaa";*/    }}

 

package com.fgy.java8se;public class Co {    int x;    int y;    public Co(int x,int y){        this.x=x;        this.y=y;    }    public static void main(String[] args) {        Co c1=new Co(3, 5);        System.out.println(c1.x);    }}

 

转载于:https://www.cnblogs.com/createyuan/p/7107454.html

你可能感兴趣的文章
在网页浏览器中原生显示PDF文件
查看>>
升级后开机就提示“android.process.acore”停止执行 --分析 解决方式
查看>>
HTML5 CSS3专题 诱人的实例 CSS3打造百度贴吧的3D翻牌效果
查看>>
OC-内存管理的一些要点
查看>>
Recurrent Neural Network(3):LSTM Basics and 《Inside Out》
查看>>
Linux基础知识-文件管理
查看>>
西窗的雨
查看>>
ubuntu:nodejs安装
查看>>
11月8日PHP练习《留言板》
查看>>
JavaScript学习笔记 1
查看>>
问题007:JDK版本与JRE版本不同导致java.exe执行类文件错误 java.lang.UnsupportedClassVersionError错误...
查看>>
shiro框架 4种授权方式 说明
查看>>
ext2文件系统 - mke2fs
查看>>
Linux Futex的设计与实现(转)
查看>>
Unix环境高级编程(二)文件和目录
查看>>
信号的捕捉与sigaction函数
查看>>
使用Google-Colab训练PyTorch神经网络
查看>>
派 二分水题
查看>>
傅里叶变换
查看>>
类的继承与派生
查看>>