首页 > 编程语言 >Java第八课_构造和静态

Java第八课_构造和静态

时间:2023-12-12 22:11:24浏览次数:30  
标签:Java name 静态 age System 第八课 println public out

2.面向对象的编程

  • 构造

    public class Practice {
        public static void main(String[] args) {
            Person person1 = new Person();
            Person person2 = new Person("lisi");
            Person person3 = new Person("哪吒", 3);
        }
    }
    
    public class Person {
    
        private String name;
        private int age;
    
        /*
            参数不同的构造器,里面可能有重复的初始化内容.可以使用this()构造器,和构造代码块.
                1.this :通过 this() 进行构造器的调用
                    a.this() 必须位于构造器的第一条语句的位置
                    b.当有n个构造器时,this() 最多有n-1个  1.可能会出现递归
                2.构造代码块{}
                    a.为所有对象初始化. 特点 : 在每次使用 new 关键字创建对象时,先于构造器执行一次
                    b.在对象初始化时执行一次.只会执行一次,不会因为this()调用构造器,而反复执行
                    c.可以有多个构造代码块`
         */
    
        {
            System.out.println("我是构造代码块!");
            cry();
        }
    
        {
            System.out.println("123");
        }
    
        public Person() {
        }
    
        public Person(String name) {
            this();
            this.name = name;
        }
    
        public Person(String name, int age) {
            this(name);
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public void cry(){
            System.out.println("555555555555555");
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
  • 静态

    public class Practice {
          /*
              程序在执行时的顺序和空间
              A a = new A() ;
    
              1.加载 A.class 文件到内存中 , 所有静态成员随之一起加载. 静态变量存在, 静态构造执行
              2.在堆内存中开辟空间,存放实际对象的值
              3.成员变量默认初始化
              4.成员变量显式初始化
              5.构造代码块初始化
              6.构造器初始化
              7.堆内存分配地址
              8.将堆内存分配的地址存入栈内存中的区域,初始化结束
        */
    
        public static void main(String[] args) {
            Student s1 = new Student("ls", 20);
            Student s2 = new Student("zs", 21);
    
            System.out.println("s1 = " + s1);
            System.out.println("s2 = " + s2);
    
            s1.country = "华夏";
    
            System.out.println(s2.country);
    
            Student.country = "中华";
    
            System.out.println(s1.country);
    
            Practice test01 = new Practice();
            test01.m1();
        }
    
        public void m1(){
            System.out.println("F");
        }
    }
    
    public class Student {
        /*
             static : 表示静态的 , 是一个修饰符
             特点 :
                1.static修饰的成员是随字节码文件一起加载的,也就是 静态成员 没有实际对象时就已经存在
                2.static修饰是共享数据. 当某一个类的变量基本不变时, 用static修饰, 只会在方法区占用一块内存, 所有对象共享
                3.访问方式多了一种 : 类名.成员名    开发推荐方式
            缺点 :
                1.访问出现局限性 : 静态的只能访问静态的,不能访问非静态的 ; 非静态成员可以访问静态成员
                2.生命周期过长 :
    
            静态变量又称为类变量
            变量: 当变量是共享数据时,就可以使用 static 修饰
            函数: 当函数没有调用非静态成员时,就可以使用static修饰
         */
    
        String name;
        int age;
        static String country = "CN";
    
        // 静态代码块: 为静态成员初始化 特点 : 只在加载字节码文件时加载一次
        static {
            System.out.println("A我是静态构造代码块!");
        }
    
        {
            System.out.println("B我是构造代码块!");
        }
    
        public Student() {
            System.out.println("C");
        }
    
        public Student(String name, int age) {
            System.out.println("D");
            this.name = name;
            this.age = age;
        }
    
        public static void m1(){
            System.out.println("E");
        }
    
        public static void show(){
            System.out.println("country = " + country);
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", country='" + country + '\'' +
                    '}';
        }
    }
    

标签:Java,name,静态,age,System,第八课,println,public,out
From: https://www.cnblogs.com/shinya/p/17897940.html

相关文章

  • Java登陆第二十三天——JavaScript对象、JSON、事件
    JS中声明对象的两种格式方法1,newobject()然后依次添加属性或方法栗子:<script>//初始化对象varuser=newObject();//给对象添加属性并赋值user.name="张三";user.age=18;//给对象添加方法user.say=functi......
  • 【一个队列实现栈】Java队列——Queue接口-LinkedList实现类
    leetcode225.用队列实现栈题意:用一个队列实现栈题解:(1)弹栈:将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,然后弹出(2)获取栈顶元素:先将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,此时队头元素即为栈顶元素;然后再重新循环siz......
  • 无涯教程-Java - Non Access Modifiers函数
    Java提供了许多非访问修饰符来实现许多其他功能。static修饰符:用于创建类方法和变量的。final修饰符:用于最终确定类,方法和变量。abstract修饰符:用于创建抽象类和方法。volatile修饰符:用于线程的已同步。static(Static)修饰符Static变量static关键字用于创......
  • Java并发(十八)----常见线程安全类及实例分析
    1、常见线程安全类StringIntegerStringBufferRandomVectorHashtablejava.util.concurrent(JUC)包下的类这里说它们是线程安全的是指,多个线程调用它们同一个实例的某个方法时,是线程安全的。Hashtabletable=newHashtable();​newThread(()->{  ......
  • 【双栈实现队列】Java——Stack类
    leetcode232.用栈实现队列题意:双栈实现队列;要求每个入队、出队操作均摊O(1)复杂度题解:用一个栈in维护入队元素,另一个栈out维护出队元素出队或取队头元素:首先判断栈out是否为空,如果为空,将栈in中的元素pop()到栈out中,那么栈out栈顶元素即为原队列队头元素。(米奇妙妙屋啊~)判断......
  • 【leetcode 239. 滑动窗口最大值】Java优先队列——PriorityQueue类
    leetcode239.滑动窗口最大值题目描述:1e5大小的nums[]数组中长度为k(1<=k<=1e5)的窗口的最大值题解:暴力求解O(n^2)会超时,需要O(nlogn)的解法使用大根堆优先队列维护窗口元素,每次取最大值复杂度降为O(1),堆结构维护复杂度O(logn)问:如果维护窗口[l,r]前[0,l-1]的元素不影......
  • Java 8 Stream 流的常用方法总结
    Java8Stream流的常用方法总结Java8引入了一个新的API:StreamAPI,它允许我们以声明式的方式处理数据集合。StreamAPI提供了一系列强大的方法,可以帮助我们更简洁、高效地处理数据。本文将总结Java8Stream流的常用方法,并提供相应的代码示例。1.创建Stream首先,我们需要了......
  • JavaScript 中栈与堆的区别
    每种编程语言都具有内建的数据类型,但它们的数据类型常有不同之处,使用方式也很不一样,比如C语言在定义变量之前,就需要确定变量的类型。在声明变量之前需要先定义变量类型。我们把这种在使用之前就需要确认其变量数据类型的称为静态语言。相反地,我们把在运行过程中需要检查数据类型......
  • 无涯教程-Java Access Modifiers函数
    Java提供了许多访问修饰符来设置类,变量,方法和构造函数的访问级别。四个访问级别是-default(默认):对当前包可见,不需要修饰符。private(私有):当前类可见。public(公共):都可见。protected(受保护):对当前包和所有子类可见。默认访问修饰符默认访问修饰符意味着我们......
  • 无涯教程-Java - Singleton Classes函数
    Singleton的目的是控制对象的创建,将对象的数量限制为一个。由于只有一个Singleton实例,因此Singleton的任何实例字段在每个类中只会出现一次,就像static字段一样。单例通常控制对资源的访问,例如数据库连接或Socket。例如,如果您仅对数据库的一个连接拥有许可证,或者JDBC驱动......