博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java初学3
阅读量:4993 次
发布时间:2019-06-12

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

1、包装类

Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢?

Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。

int的默认值为0,而Integer的默认值为null,
即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,
Integer类型的值会在堆空间开辟存储区域,
int 类型的值会存放于栈空间,存储和读取速度快于Integer值;
但是Integer类提供了多个和整数操作相关的方法,
如进制转换,大小比较,类型转换等,这是int 无法比拟的;

(1)除了Integer和Character定义的名称和对应的基本类型差异大,其他六种都是将首字母大写就可以了。
(2)Integer,Byte,Float,Double,Short,Long都是Number类的子类。(Number类后面讲);
(3)Character和Boolean都是Object直接子类;
(4)8个类都是final修饰的(不可被继承)。
把基本数据类型 → 包装类:
     •通过对应包装类的构造方法实现
     •除了Character外,其他包装类都可以传入一个字符串参数构建包装类对象。
包装类 → 基本数据类型
     •包装类的实例方法xxxValue();    // xxx表示包装类对应的基本数据类型
boolean bool = false;
Boolean b2 = new Boolean(bool);
Integer i = new Integer(3);
int i2 = i.intValue();
Boolean b1 = new Boolean("TRue");//true
boolean b2 = b1.booleanValue();
Float f = new Float("3.14");//3.14
Integer i2 = new Integer("123s");//NumberFormatException

2、自动装箱&自动拆箱

jdk1.5开始出现的特性:
    •自动装箱:可把一个基本类型变量直接赋给对应的包装类对象或则Object对象
    •自动拆箱:允许把 包装类对象直接赋给对应的基本数据类型 
int i1 = 12;int i2 = 12;System.out.println(i1 == i2)//trueInteger in1 = new Integer(12);Integer in2 = new Integer(12); System.out.println(in1 == in2)//falsein1 = 12;in2 = 12;System.out.println(in1 == in2)//truein1 = -250;in2 = -250;System.out.println(in1 == in2)//false//这里涉及到了一个享元模式//就是说在你操作整数的时候,有一个区间的数【-128~127】,你会经常使//用,它会缓存起来,所以-250为false,12为true//byte,short,integer,long都是一样的
Integer i = 3;//装箱
int i2 = i;//拆箱
Object flag = new Boolean(false);
if(flag instanceof Boolean){
Boolean b = (Boolean)flag;
boolean b2 = b;
}

3、基本类型和String之间的转换

ØString → 基本类型,除了Character外所有的包装类提供parseXxx(String s)静态方法,用于把一个特定的字符串转换成基本类型变量;
Ø基本类型 → String,String 类有静态方法valueOf(),用于将基本类型的变量转换成String类型。
String str = "17";
int i = Integer.parseInt(str);//String  --> 基本类型
String s1 = String.valueOf(i);//基本类型 --> String
 
 
4、代码块
(1)代码块指的是使用"{}"括起来的一段代码,根据代码块存在的位置可以分为4种: 
       •普通代码块;
       •构造代码块;
       •静态代码块;
       •同步代码块(线程同步的时候讲解)。
(2)代码块里变量的作用域:
       •只在自己所在区域(前后的{})内有效;
A、普通代码块
     普通代码块就是直接定义在方法或语句中定义的代码块:
.....main.....{    {         int x = 1;         System.out.println("普通代码块" + x);    }    int x = 99;    System.out.println("代码块之外" + x);} //普通代码块1//代码块之外99

B、构造代码块

     直接写在类中的代码块(优先于构造方法执行,每次实例化对象之前都会执行构造代码块)
public class Demo {    {     System.out.println("我是构造代码块");    }    public Demo(){    System.out.println("我是构造方法");    }    public static void main(String[] args) {
System.out.println("main"); Demo d1 = new Demo(); Demo d2 = new Demo(); }}//main //我是构造代码块//我是构造方法
//我是构造代码块//我是构造方法

C、静态代码块 

     使用static 修饰的构造代码块(优先于主方法执行,优先于构造代码块执行,不管有创建多少对象,静态代码块只执行一次,可用于给静态变量赋值)
public class Demo {    {    System.out.println("我是构造代码块");    }    public Demo(){    System.out.println("我是构造方法");    }    static {    System.out.println("我是静态代码块");    }    public static void main(String[] args) {    System.out.println("Main");    new Demo();    new Demo();   }}//我是静态代码块 //main //我是构造代码块//我是构造方法
//我是构造代码块//我是构造方法

D、同步代码块

5、包装类Integer把十进制转换成二进制、八进制、十六进制
如果用到了对int,bool的相关操作,都可以使用自己的包装类来进行,这也是包装类的好处
但包装类毕竟是对象,所以会被分配到堆上,视情况来使用!
注意点

6、final关键字

①final可以修饰类,方法,变量。
②final修饰类不可以被继承,但是可以继承其他类。 (太监类)
③final修饰的方法不可以被覆盖,但可以覆盖父类方法。(太监方法)
④final修饰的变量称为常量,这些变量只能赋值一次。(太监变量)
⑤内部类在局部时,只可以访问被final修饰的局部变量。
⑥final修饰的引用类型变量,表示该变量的引用不能变,而不是该变量的值不能变;
   通常规范中:常量名称所有字母大写,若有多个单词组成,单词间使用下划线连接。
   public static final修饰的常量称为全局常量;
7、

转载于:https://www.cnblogs.com/MrZivChu/p/startstudyjava3.html

你可能感兴趣的文章
scss侦听并压缩
查看>>
我有接口文档, 你有酒吗?
查看>>
iOS - Push 通知推送
查看>>
[FJOI2007]轮状病毒
查看>>
Azure AADSTS7000215 其中一种问题的解决
查看>>
关于吃苦
查看>>
uva 1629切蛋糕(dp)
查看>>
生成awr报告
查看>>
cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)
查看>>
Android 深入解析光传感器(二)
查看>>
Ansible@一个高效的配置管理工具--Ansible configure management--翻译(八)
查看>>
【bzoj4552/Tjoi2016&Heoi2016】排序——二分+线段树/平衡树+线段树分裂与合并
查看>>
Windows Internals学习笔记(八)IO系统
查看>>
sql插件,SQLPrompt
查看>>
Objetive-C 属性和线程安全
查看>>
mybatis pagehelper实现分页
查看>>
很牛的javascript日期转换函数
查看>>
javascript格式化json显示
查看>>
Redis 在 SNS 类应用中的最佳实践有哪些?
查看>>
关于Unity 动画绘制原理
查看>>