• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SeanTandol

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

java基础回顾

常用DOS命令

  • 回退一级目录:cd..

  • 回退到顶级目录:cd\

  • 清屏:cls

  • 退出:exit


java在DOS中编译和运行

  • 带包编译:文件根目录 javac 文件名.java

    • 例子:javac HelloWorld.java
  • 带包运行:包根目录 java 包名.类名 参数1 参数2

    • 例子:java com.sean.test.HelloWorld arg1 arg2
  • jar包运行: java -jar jar包目录\jar包名称.jar 参数1 参数2

    • 例子:java -jar E:\jar\util.jar arg1 arg2

关键字

  • 访问控制
private    protected    public
  • 类,方法和变量
abstract    class    extends    final    implements    interface    native    new
static    strictfp    synchronized    transient    volatile
  • 程序控制
break    continue    return    do    while    if    else    for    
instanceof  switch case    default
  • 异常处理
try    catch    throw    throws
  • 包相关
import    package
  • 基本类型
boolean    byte    char    double    float    int    long    short    null   
true    false
  • 变量引用
super    this    void
  • 保留字
goto    const
  • 不常用字段解释
    • strictfp:在接口和类上加上该标识,会对float和double进行严格计算
    • transient:在对象成员变量中加上该标识,在对象序列化时,被标识变量不会被序列化
    • volatile:在变量前加入该标示,解决多线程情况下变量的可见性和有序性,但无法解决原子性问题,应用场景为,变量的值不参与修改的情况。参见:Java并发编程:volatile关键字解析

数据类型

  • 基本数据类型

    A:整数 占用字节数
    byte 1
    short 2
    int 4
    long 8
    B:浮点数
    float 4
    double 8
    C:字符
    char 2
    D:布尔
    boolean 1

    注意:!!!!!
    整数默认是int类型,浮点数默认是double。

    长整数要加L或者l。
    单精度的浮点数要加F或者f。

思考题和面试题

  • 下面两种方式有区别吗?

    float f1 = 12.345f; // 本身是一个float类型
    float f2 = (float)12.345; // 开始是一个double类型,强转为float类型

  • 下面的程序有问题吗,如果有,在哪里呢?

    byte b1 = 3;
    byte b2 = 4;
    byte b3 = b1 + b2; // 有问题,byte参与运算就转换为int类型,编译会报错
    byte b4 = 3 + 4; // 常量,先把结果计算出来,然后看是否在byte的范围内,如果在,就不报错

  • 下面的操作结果是什么呢?

    byte b = 130; // 编译报错,130不在范围内
    byte b = (byte)130; // -126 源码反码补码!???

  • 字符参与运算

    是查找ASCII里面的值
    'a' 97
    'A' 65
    '0' 48

    System.out.println('a'); // a
    System.out.println('a' + 1); // 98

  • 字符串参与运算

    这里其实是字符串的连接

    System.out.println("hello"+'a'+1); // helloa1
    System.out.println('a'+1+"hello"); // 98hello
    System.out.println("5+5="+5+5); // 5+5=55
    System.out.println(5+5+"=5+5"); // 10=5+5


赋值运算符

扩展的赋值运算符的特点
隐含了自动强制转换。

面试题:
short s = 1;
s = s + 1;(编译错误)

short s = 1;
s += 1;(<==>s=(short)(s+1))
请问上面的代码哪个有问题?


位运算

后续补充…..


方法

  • 方法重载:方法名称相同,参数列表不同,与返回值无关。
  • 方法覆盖:方法名称相同,参数列表相同,返回值相同。

java内存分配

  • 栈:存储局部变量(在方法定义中或者方法申明上定义的变量)以及常量值
    数据使用完毕就消失

  • 堆:存储所有new出来的对象

    每一个new出来的东西都有地址 每一个变量都有默认值 byte,short,int,long 0 float,double 0.0 char '\u0000' boolean false 引用类型 null 数据使用完毕后,在垃圾回收器空闲的时候回收。

  • 方法区:
    class内容区域:文件中的内容,包含成员变量和成员方法,每个class的方法会有一个地址,为堆中的调用提供连接 静态区:静态变量和静态方法
    这里写图片描述

  • 本地方法去:与本地系统相关

  • 寄存器:CPU相关

创建对象,内存的流程图:
(1)把Student.class文件加载到内存
(2)在栈内存为s开辟空间
(3)在堆内存为学生对象申请空间
(4)给学生的成员变量进行默认初始化。null,0
(5)给学生的成员变量进行显示初始化。林青霞,27
(6)通过构造方法给成员变量进行初始化。刘意,30
(7)对象构造完毕,把地址赋值给s变量
这里写图片描述


成员变量和局部变量区别

  1. 在类中的位置
    成员变量:类中,方法外
    局部变量:在方法中或方法声明上
  2. 在内存中的位置
    成员变量:堆
    局部变量:栈
  3. 初始化的值
    成员变量:有默认值
    局部变量:没有默认值,只有定义,赋值,才能使用
  4. 生命周期
    成员变量:随着对象的创建而创建,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的结束而消失

this

作用:

  • 解决了局部变量隐藏成员变量的问题

构造方法

  • 格式:
    • 方法名和类名相同
    • 没有返回值类型,void也没有
    • 没有返回值
		思考题:构造方法中可不可以有return语句呢?		*****
		可以。而是我们写成这个样子就OK了:return;
		其实,在任何的void类型的方法的最后你都可以写上:return;

static关键字

  1. 特点:
    1.1 随着类的加载而加载
    1.2 优先于对象存在
    1.3 被类的所有对象共享
    1.4 既可以通过类名调用,也可以通过对象名调用

  2. 内存图
    静态的内容在方法去的静态区

  3. 注意事项
    3.1 静态方法中没有this对象
    3.2 静态只能访问静态

posted on 2018-03-24 16:18  SeanTandol  阅读(82)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3