IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> day15_权限修饰符丶代码块丶native关键字丶包装类 -> 正文阅读

[Java知识库]day15_权限修饰符丶代码块丶native关键字丶包装类

权限修饰符

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,

  • public:公共的
  • protected:受保护的
  • (空的):默认的
  • private:私有的

不同权限的访问能力

可见,public具有最大权限。private则是最小权限。访问权限大小: ?public > ?protected ?> ?空 ? > ?private

编写代码时,如果没有特殊的考虑,建议这样使用权限:

  • 成员变量使用private ,隐藏细节。
  • 构造方法使用public ,方便创建对象。
  • 成员方法使用public,方便调用方法

代码块

在java中用{ }括起来的称为代码块,代码块可分为以下四种:静态代码块丶局部代码块丶构造代码块丶同步代码块。

构造代码块:

  • 格式:用{ }包裹起来的代码片段
  • 位置: 类中,方法外
  • 执行: 每次执行构造方法之前都会执行一次。如果存在多个构造代码块,执行顺序由他们在代码中出现的次序决定,先出现先执行。
  • 使用场景: 例如统计对象的个数 也就是每次执行构造方法之前要执行的代码就可以放在构造代码块中
class Demo{
    {
        System.out.println("我是构造块,会在创建对象时被调用。");
        System.out.println("每次创建时都会被调用,优先于类构造函数执行。");
    }
}

静态代码块

  • 格式:用static{ }包裹起来的代码片段。.静态代码块不能直接访问实例变量和实例方法,需要通过类的实例对象来访问。
  • 位置: 类中,方法外。
  • 执行: 当类被加载的时候执行,并只执行一次。
  • 使用场景: 例如加载驱动,这种只需要执行一次的代码就可以放在静态代码块中 ??
class Demo{
    static {
        System.out.println("只会执行一次。");
        System.out.println("静态代码块优先于构造块执行。");
        System.out.println("  执行优先级:  静态代码块 >  构造代码块  >  构造方法");
    }
}

二者的区别:

  • 相同点:都是JVM加载类后且在构造函数执行之前执行,在类中可定义多个,一般在代码块中对一些static变量进行赋值。
  • 不同点:静态代码块在非静态代码块之前执行。静态代码块只在第一次new时执行一次,之后不在执行。而非静态代码块每new一次就执行一次。

局部代码块

  • 格式:用{ }包裹起来的代码片段
  • 位置:?方法中
  • 执行:调用方法,执行到局部代码块的时候就执行
  • 使用场景:节省内存空间,没有多大的意义
public class Test {
    public static void main(String[] args) {
        /*
            局部代码块:
                格式: {}
                位置: 方法中
                执行: 调用方法,执行到了局部代码块的时候执行
                使用场景: 节省内存空间,没有太多意义
         */
        System.out.println("开始");
        {
            int num1 = 10;
            System.out.println("局部代码块");
        }// 把局部代码块中的变量占用的空间会释放

        System.out.println("结束");
    }
}

同步代码块

使用synchronized(){ }包裹起来的代码块就是同步代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数 ? ? ? 据的不一致性。同步代码块需要写在方法中。多线程的时候在详细说明。

native关键字

概述:native翻译为,本地的,原生的。用法: 只能修饰方法,表示这个方法的方法体代码不是用Java语言实现的,而是由C/C++语言编写的。 这种方法是没有方法体的,我们查看不了它的实现,所以大家不需要关心该方法如何实现的。

  • 当我们需要访问C或C++的代码时,或者访问操作系统的底层类库时,可以使用本地方法实现。也就意味着Java可以和其它的编程语言进行交互。
  • 本地方法的作用: 就是当Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。

JVM内存的管理:

包装类

概述:Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

  • 装箱从基本类型转换为对应的包装类对象。转为包装类的对象,是为了使用专门为对象设计的API和特性
Integer i1 = new Integer(4);//使用构造函数函数
Integer i2 = Integer.valueOf(4);//使用包装类中的valueOf方法
  • 拆箱:从包装类对象转换为对应的基本类型。转为基本数据类型,一般是因为需要运算,Java中的大多数运算符是为基本数据类型设计的。比较、算术等
Integer i1 = new Integer(4);
int num1 = i1.intValue();

JDK1.5之后,可以自动装箱与拆箱。只能与自己对应的类型之间才能实现自动装箱与拆箱。

Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。

基本类型与字符串之间的转换

基本类型转换为String

int a = 10;
//String str = a;//错误的
//方式一:直接在数字后加一个空字符串    
String str = a + "";
//方式二:通过String类静态方法valueOf()
String str = String.valueOf(a);

String转换成基本类型

除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型

  • public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
int a = Integer.parseInt("整数的字符串");

注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常

包装类对象的缓存问题

代码示例

package teacherCode.demo09;

public class Demo01 {
    public static void main(String[] args) {
        Integer i = 1;
        Integer j = 1;
        System.out.println(i == j);//true

        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);//false

        Integer x = new Integer(1);//新new的在堆中
        Integer y = 1;//这个用的是缓冲的常量对象,在方法区
        System.out.println(x == y);//false

        Integer c = new Integer(1);//新new的在堆中
        Integer d = new Integer(1);//另一个新new的在堆中
        System.out.println(c == d);//false

        Double d1 = 1.0;
        Double d2 = 1.0;
        System.out.println(d1==d2);//false 比较地址,没有缓存对象,每一个都是新new的
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:22:29  更:2022-03-04 15:25:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:51:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码