Java学习笔记(1)

记录自己的Java学习过程,第一篇为基础篇,非全部基础知识,以需要注意的点为主。

一、基础tips

1、float赋值方式可用:

float f1 = 1.2f;//错误

float f2 = 1;

float f3 = 0xAE;

float类型赋值需要加f,不加默认为double,第一种若不加f会报错(double类型可省略d);可以从整数直接转为float,故可以用第2、3钟。

2、在Java中,参数传递方式是按值/指针传递,调用函数时拷贝,不影响实参的值。

3、i++在表达式中用旧值计算,表达式结束后+1;++i会先+1,在表达式中用新值计算。

4、Java中每个类都可以有一个main方法,但是只有在作为程序的入口点时才会被执行。当创建一个类的对象时,并不会再次执行该类的main方法。

5、interface中的方法默认是public的,不能降低访问权限;interface中的方法默认是abstract的,不能有方法体。

二、循环语句

if 。。。

        if 。。。

else。。。

每个else会和最近的if语句连接,而与排版无关,因此else对应第二个if;写if...else最好采用大括号。

三、类和对象

1、Class1 class1 = new Class1;

对象需要用new操作初始化,否则它的值是null,会出现NullPointerException。

2、当类没有显示的构造函数时,编译器会自动添加一个无参的构造函数;

而当类里面有带形参的构造函数时,编译器不会自动添加无参的构造函数,此时

Class obj1 = new Class();

上述语句找不到相应的构造函数,会报错,应添加形参。

3、子类构造函数无super函数时,第一句话默认调用父类的无参构造函数(隐式super函数);

父类没有无参构造函数时,子类构造函数必须显式调用父类的有参构造函数。

4、子类可转为父类,父类不可转为子类;

子类转为父类后,调用普通方法依然是子类方法;

无继承关系时不可以转换。

5、方法中的临时变量是没有初始化的,在使用之前必须初始化;

但类成员变量默认是有初始值的,其初始值为null。

四、static、final和常量设计

1、static和final关键字

static 表示全局的 or 静态的

static变量可通过类访问,不从属于任何对象,可用对象访问但不建议;所有对象的该变量共享一个存储空间
static方法可通过类引用;只能使用静态变量和静态方法
static块只在类被第一次加载时调用一次(static块 > 匿名块 > 构造函数,后两者在创建时调用)

final 表示最终的,不可变的

final变量相当于常量,基本类型不能修改值,对象类型不能修改指针
final方法不能被子类重写
final类不能被继承

static final 同时具有两种特征

static final变量表示一旦赋值不可以修改,并且可以用类直接访问 or 调用
static final方法表示不可覆盖,并且可以通过类直接访问 or 调用

ps:

接口内定义的变量默认为常量,无法修改,即public static final,若显式修改为其他(如private)则无法通过编译。

2、常量池

Java为很多基本类型的包装类(注意是包装类不是基本类型)和字符串都建立常量池。

常量池:相同的值只存储一份(范围内,除String),节省内存,共享访问

Boolean

true、false
Byte-128~127
Character0~127
Short、Integer、Long-128~127
Float、Double没有常量池
String只要值相等,就指向同一个内存空间

常量式赋值创建,放在栈内存,会被常量化;

new对象创建,放在堆内存,不会被常量化。

ps:

  • 两个对象进行比较时,会比较其地址
  • 基本类型和包装类对象进行比较,会使对象自动拆箱为基本类型进行比较。
  • 字符串“+”运算时,编译器自动优化为一个字符串,但其中涉及变量/new对象时不会自动优化。
  • 字符串用“==”比较时比较的是指针,比较内容要用equals方法。

3、不可变对象(immutable对象)

  • 所有属性都是final和private的;
  • 不提供setter方法;
  • 类是final的,或者所有方法都是final;
  • 若需要改变,请clone/new一个对象进行修改;
  • 如果类中包含可变对象(mutable对象),那么返回拷贝需要深度clone。

优点:只读,线程安全;并发读,提高性能;可以重复使用。

缺点:制造变量垃圾,浪费空间。

对不可变对象进行修改时,会开辟新的空间,旧对象被搁置,直到垃圾回收。

4、字符串

String对象是不可变对象,需要大量修改拼接等操作时可使用StringBuffer / StringBuilder类的append方法修改来提高效率。

  • StringBuffer / StringBuilder的对象都是可变对象。
  • StringBuffer(同步,线程安全,修改快速);StringBuilder(不同步,线程不安全,修改更快)
  • 字符串append操作速度:StringBuilder > StringBuffer > String

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值