Javase_1.1fundation

本文介绍了Java SE 1.1的基础知识,包括基本数据类型如byte、short、int、long、float、double、char和boolean的特性,以及下划线的用法。此外,讲解了浮点数格式化、位运算符、数据类型转换、包装类的概念、变量的区别、访问控制修饰符和Java关键字。重点突出了数据类型、运算符和基础语句结构的讲解。
摘要由CSDN通过智能技术生成

JavaSE 1.1 基础知识

关于数据

基本类型概览
byteshortintlongfloatdoublecharboolean
8位16位32位64位32位64位16位8位

下划线的作用

数据太长,可以使用下划线分割方便浏览:100_000_000 。好看,没有实际效果。

浮点数据格式化

"%4.2f",number : %整个长度度.精度(小数点后面)转换码。

浮点计算为什么不准:

2进制无法表示十进制小数点,除不尽。如1/10,在16进制中为1.6/16,除不通。
所以尽量避免浮点的相等的判断。
如果需要使用浮点运算,且需要精度,可以使用BigDecimal类。

位运算的符号:

假设整数变量 A 的值为 60 和变量 B 的值为 13

如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是 0,则结果为 0,否则为 1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<<按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111
数据类型转换:

整形缩小只要装的下也不用显式转换,浮点转整数需要强转,强制转换低位,高位舍去。
强制转换(数据类型) 数据

包装类:

byteshortintlongfloatdoublecharboolean
ByteShortIntegerLongFloatDoubleCharacterBoolean
包装类的意义:

基本数据类型没有方法和属性,而包装类有大量封装的方法可以使用,例如:
MIN_VALUE = 0x80000000:整型最小值。
MAX_VALUE = 0x7fffffff:整型最大值。
toBinaryString(int i):变成二进制的字符串。
parseInt(String s) :将字符串解析成整型。

除此之外,包装类是引用类型,可以用于泛型。


变量的区别:

  • 局部变量:
    在方法的内部;出了方法就不能在用了; 没有默认值,必须手动进行赋值。
    位于栈内存; 随着方法进栈而诞生,随着方法出栈而消失。
  • 成员变量:
    在方法的外部,类的里面; 整个类都可以用; 不赋值的话有初始值。
    位于堆内存;随着对象创建而诞生,随着对象被“垃圾回收”而消失。

定义的位置不同;作用范围不同;默认值不一样;内存位置不同;生命周期不同。

Java关键字,这里找的图好像是1.5的:(后续JDK还有添加,如assert、default等)

在这里插入图片描述

访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,空): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类或无关类可见,不同包的子类。使用对象:变量、方法。 注意:不能修饰类(外部类)

            范围由大到小                                  public   >     protected   >   (default)   >   private
    
同一个类(我自己)YESYESYESYES
同一个包(我邻居)YESYESYESNO
不同包子类(我儿子)YESYESNONO
不同包非子(陌生人)YESNONONO

非访问修饰符

  • static 修饰符,用来修饰类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • synchronizedvolatile 修饰符,主要用于线程的编程。
  • native 用来表示本地的方法,一般是以C++和C写的。

static:

随着类的加载而加载的,且只加载一次。 直接通过类名.调用。

静态的内容它优先于对象存在,所以,可以被所有对象共享。

static中不能进行this、super的调用。

静态内容不能直接访问非静态。(因为先有静态内容,后有动态内容)

本类中自己调用的自己的静态方法可以不加类名,编译器会自动添加,成员方法必须创建对象才能调用,而类变量和静态方法都推荐使用类名直接调用,而不需要创建类的对象。使用对象调用时,在编译时也会被编译成类名调用。

静态代码块: 会随着类的加载一块执行,可以随意放置,可以存在于该类的任何地方。

final:

表示不可改变。可以用于修饰类、方法和变量。

类: 被修饰的类,不能被继承。

如:public final class String 、 public final class Math 、 public final class Scanner

方法: 被修饰的方法,不能被重写。

对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。

变量:

  1. 修饰的局部变量为基本类型时,就是数据不能变
  2. 修饰的局部变量为引用类型时: 地址值不能变,只能指向一个对象,不影响对象内部的改变。
  3. 修饰成员变量时:不同于局部变量,成员变量有初始化。不能默认赋值,需要直接初始化或构造方法初始化,且每个构造方法都要有该局部变量的初始化。

枚举(enum)

Java 枚举是一个特殊的类,一般表示一组常量。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号,来分割。

一般枚举都是通过内部类实现的,且所有的枚举值都是 public static final 的。

enum Color
{
    RED, GREEN, BLUE;
}

public class MyClass {
    public static void main(String[] args) {
        for (Color myVar : Color.values()) {
            System.out.println(myVar);
        }
    }
    switch(myVar) {
          case RED:
            System.out.println("红色");
            break;
    }
}

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。

Enum类的方法

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。
枚举类:

跟普通类一样有自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果有抽象方法,则枚举类的每个实例都必须实现它。


Java基础语句结构

循环标记,循环点

可以通过break直接结束标记的循环。用来结束多层循环,一般不建议使用。

mark:for(   ;   ;   ){
	break mark;
}

switch语句:

switch判断中能有基本类型byte/short/char/ 会强转至int,以及String,还有一种enum。

case后面为常量,或final过的变量。

default最好别省,且default的break可以省略但是也做好不省略。

可以使用return直接跳出函数就不用break了

穿透效果:

每个case无顺序要求但不能重复,包括default。

如果执行代码块没有break,那么程序会向下执行下一个case直至break,或者结束(所以最后一个选项可以没有break)。

continue和break的区别:

  • continue是结束本次的循环会继续下一次循环,基本要通过条件判断,switch中不能使用。
  • break是结束循环,switch中不加条件。

for循环

运行顺序:
for(初始化语句仅执行一次:先 ① 布尔表达式判断:循环体结束后 ③ 步进运算){
   为True则 ② 执行循环体;
}

布尔表达式判断为false终止

for的增强循环:

主要用于遍历集合或数组,增删时不能使用,否则会抛出并发修改异常,终止程序。

for(Person x : array ){
    System.out.print( x.getName() );
    System.out.print(",");
}
for (;boolean expression;)

左右可以省略,或多个表达式,但如果中间是空的,表示中间是true。


do…while循环:

用途:一定会执行一次,先执行再判断while布尔值。

do{//循环体;
}while(布尔表达式);

方法基础

print方法:

System.out.printf("浮点型为:" + "%f, 整型为:" + " %d, 字符串为:" +
        " %s", floatValue, intValue, stringValue);

定义方法:

与变量相同使用小驼峰形式,即第一单词的首字母小写例如:thisIsAnExample

public static void 方法名称(parameter){
	//方法体
}
完整定义格式:
修饰符 返回值类型 方法名称(传入parametertype parameter,······){
	方法体;
    return(停止当前方法) 返回值还给调用处;
}

方法定义顺序无所谓,并列定义,不能进行方法嵌套定义。

方法的调用:
  • 单独调用
  • 嵌套调用print(method(x))
  • 赋值调用int a = method(x)
return:

直接返回
返回1个值
多个值的返回可以使用数组,集合。

方法的重载(overload):

方法名称相同,参数列表不同。参数可以数量不同或者类型不同。但是只改变参数名称不行,而且与方法的返回值改变也没有关系。顺序不同也是。

**用途:**只需要记住一个方法的名称,即可以实现类似的多个功能,避免了命名的痛苦。

一些Tips

单引号为char,双引号为String

编译器的常量优化:

在编译时,如果在表达式中只有常量,那么编译时直接计算获得结果,在.class中已经是结果了

print类名:

cn.xxx.xxx.hello@1e643f //前面是类型,@后是地址

print时如果仅传入数字,那么+为求和,如果里面含有String类型,那么+为拼接方法。//不怎么确定

数组的地址,即名字。

方法的重载(overload):

方法名称相同,参数列表不同。参数可以数量不同或者类型不同。但是只改变参数名称不行,而且与方法的返回值改变也没有关系。顺序不同也是。

**用途:**只需要记住一个方法的名称,即可以实现类似的多个功能。

方法的重写(override):

和面向对象性质有关,重新改写方法,这里先不提及。


Tips

单引号为char,双引号为String

编译器的常量优化:

在编译时,如果在表达式中只有常量,那么编译时直接计算获得结果,即在.class中已经是结果了。

print:

调用toString方法
引用类型默认toString方法为
xxx.xxx.hello@1e643f //前面是包名类名,@后是地址相关的
print时如果仅传入数字,那么+为求和,如果里面含String类型,那么+为拼接。需要加括号,提前运算数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值