【详细+超基础】Java-学习笔记 09

简介: 【详细+超基础】Java-学习笔记 09

修饰符


1.1 package与 import


  • 包的概念 包就是文件夹,用来管理类文件的
  • 包的定义格式 package 包名; (多级包用.分开) 例如:package com.jumper.demo;
  • 带包编译&带包运行 带包编译:javac –d . 类名.java 例如:javac -d . com.jumper.demo.HelloWorld.java 带包运行:java 包名+类名 例如:java com.jumper.demo.HelloWorld
  • 导包的意义 使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦了 为了简化带包的操作,Java就提供了导包的功能
  • 导包的格式 格式:import 包名; 范例:import java.util.Scanner;
  • 示例代码(没有使用导包,创建的Scanner对象)
package com.heima;
public class Demo {
  public static void main(String[] args) {
  // 1. 没有导包,创建Scnaner对象
java.util.Scanner sc = new java.util.Scanner(System.in);
  }
}
  • 示例代码(使用导包后,创建的Scanner对象)
package com.heima;
import java.util.Scanner;
public class Demo {
  public static void main(String[] args) {
  // 1. 没有导包,创建Scnaner对象
    Scanner sc = new Scanner(System.in);
  }
}


1.2 访问修饰符


在前面定义类时使用了public,定义属性时使用了private,定义方法时使用了public。它们都是java的访问修饰符。java一共定义了四种访问权限控制符:private、默认访问权限、protected、public,通过权限控制符合包能够控制访问权限。


  • private
    private可以用来修饰成员变量、成员方法、构造方法以及内部类(内部类是定义在另 个类里面的类,跟成员变量一样属于另一个类的成员)。private 修饰的成员只能被它所属的 类内的其他方法访问,不能被该类以外的其他类访问。
  • 默认访问权限 默认访问权限也称为包访问权限,不写访问控制符的就是默认访问权限。默认访问权限可以用来修饰成员变量、成员方法、构造方法、类和接口。默认访问权限定义的内容可以被同一个包中的类所访问,包括它本身,但不能被别的包中的类访问。
  • protected protected可以用来修饰成员变量、成员方法、构造方法以及内部类。protected 修饰的成员可以被同一个包内的其他类访问,不同包如果是它的子类也可以访问,其他包中不是它的子类的类不能访问。
  • public public可以用来修饰成员变量、成员方法、构造方法以及类和接口。pulie修饰的成员可以被任何类访问,无论是否在同一一个包内。


访问权限表


image.png


类变量、实例变量与局部变量


定义在类体内且在方法外的变量称为成员变量,定义在方法内的变量称为局部变量。


成员变量:


类的成员变量有两种:一种是类变量,一种是实例变量,定义成员变量时,若变量前有关键字static, 则称为类变量, 若没有static 关键字,则称为实例变量。类变量存储在类的公用区,属于类所有,所有该类的对象共享这一个类变量;而实例变量属于对象所有,每个对象拥有自己独立的实例变量,保存在对象的内存中。


局部变量:


定义在方法中的变量称为局部变量。局部变量也有两种:一种是方法的形参,一种是方法体内定义的变量。局部变量的生命周期只存在于方法内,方法调用结束,局部变重也就不存在了。


方法体内的局部变量必须赋初值后才能使用,否则编译器认为该变量没有初始化,不能使用。


实例方法与类方法


方法声明时,方法名前不加static的是实例方法,加static的是类方法。 当以类为模板创建多个对象时,则每个对象拥有自己独立的实例方法,但是所有对象共用类的类方法。


(1)  实例方法调用。


对象名.方法();


(2) 类方法调用。 调用类方法有两种格式:  “对象名.方法0”    或者   “类名方法0”,建议使用  “类名方法()”。


**案例:**编写一个员工类,假设所有员工的基本工资都一样,但津贴不一样,员工类 具有返回总薪水的方法和普调工资的方法,具体代码如下:

public class Employee {
    static double wage;  // 基本工资,static变量,所有对象都一样
    double allowance;    // 津贴,实例变量,每个对象的津贴可能都不一样
    public double getSalary() { //实例方法。可以使用实例变量和类变量
        return wage+allowance;
    }
    public static void addWage(int a) {
        wage=wage+a;
        // allowance=allowance+a; 错误:因为类方法只能使用类变量
    }
    public static void main(String[] args) {
        Employee e1=new Employee();
        Employee.wage=1000;
        e1.allowance=200;
        Employee.addWage(500);
        System.out.println(e1.wage);
        System.out.println(e1.getSalary());
    }
}

**总结:**类方法属于类所有,第一次加载类时就存在于类的内存了,不用创建对象就可以使用,所以类方法只能使用类变量,因为它们都是在类加载时就存在了。但实例变量不同,实例变量必须在创建了对象后才存在于对象的内存里,所以类方法不能使用实例变量。实例方法是在对象创建后才存在,有了实例方法后,类变量和实例变量肯定都存在了,所以实例方法可以使用类变量和实例变量。


1.1 final关键字


  • fianl关键字的作用

      final代表最终的意思,可以修饰成员方法,成员变量,类

  • final修饰类、方法、变量的效果

      fianl修饰类:该类不能被继承(不能有子类,但是可以有父类)

      final修饰方法:该方法不能被重写

      final修饰变量:表明该变量是一个常量,不能再次赋值

  • fianl修饰基本数据类型变量

      final 修饰指的是基本类型的数据值不能发生改变

  • final修饰引用数据类型变量


      final 修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的


      举例:

public static void main(String[] args){
  final Student s = new Student(23);
  s = new Student(24); // 错误
  s.setAge(24); // 正确
}


1.2 static关键字


  • static的概念

     static关键字是静态的意思,可以修饰【成员方法】,【成员变量】


  • static修饰的特点

     被类的所有对象共享,这也是我们判断是否使用静态关键字的条件

     可以通过类名调用当然,也可以通过对象名调用【推荐使用类名调用】


示例代码:

class Student {
  public String name; //姓名
  public int age; //年龄
  public static String university; //学校 共享数据!所以设计为静态!
  public void show() {
    System.out.println(name + "," + age + "," + university);
  }
}
public class StaticDemo {
    public static void main(String[] args) {
        // 为对象的共享数据赋值
        Student.university = "山东建筑大学";
        Student s1 = new Student();
        s1.name = "孙不坚";
        s1.age = 18;
        s1.show();
        Student s2 = new Student();
        s2.name = "孙铭";
        s2.age = 17;
        s2.show();
    }
}


static的访问特点


  • 非静态的成员方法


          能访问静态的成员变量

          能访问非静态的成员变量

          能访问静态的成员方法

          能访问非静态的成员方法


  • 静态的成员方法


          能访问静态的成员变量

          能访问静态的成员方法


总结成一句话就是: 静态成员方法只能访问静态成员


对象的初始化顺序


  • 父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量(实例变量)、父类非静态代码块、父类构造器(构造方法)、子类非静态变量、子类非静态代码块、子类构造器(构造方法)


  • 先父后子,先静态后非静态,先量再块后方法。


代码块的初始顺序


class person{
    private String name;
    static {
        System.out.println("这是静态代码块1");
    }
    {
        System.out.println("这是实例代码块")
    }
     static {
        System.out.println("这是静态代码块2");
    }
    public person (String name) {
        this.name=name;
         System.out.println("这是构造函数");
    }   
}
执行结果如下
    这是静态代码块1
    这是静态代码块2
    这是实例代码块
    这是构造函数

静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。静态代码块是根据我们书写代码的顺序进行执行的,按顺序执行。


相关文章
|
6月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
101 4
|
4月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
135 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
3月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
77 0
|
5月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
5月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
|
5月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
4月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
59 0
|
4月前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
55 0
|
5月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
|
6月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
79 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)