• java_oop_方法2


    基本和引用数据类型
        存储方式
        数据类型总结

        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);
        }
    }
  • 相关阅读:
    JS 实现点击<a> 标签的时候给其换背景
    LeetCode解题思路 (一)
    读书笔记之《操作系统概念》
    读书笔记之《程序员代码面试指南(字符串问题)》
    读书笔记之《程序员代码面试指南(栈和队列)》
    读书笔记之《程序员代码面试指南(数组和矩阵问题)》
    读书笔记之《程序员代码面试指南(位运算及大数据)》
    项目常用功能代码
    读书笔记之《深入理解Java虚拟机》
    读书笔记之《程序员代码面试指南(链表问题)》
  • 原文地址:https://www.cnblogs.com/createyuan/p/7107454.html
Copyright © 2020-2023  润新知