java基础回顾

Wesley13
• 阅读 562

常用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的方法会有一个地址,为堆中的调用提供连接 静态区:静态变量和静态方法 java基础回顾

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

  • 寄存器:CPU相关

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


##成员变量和局部变量区别

  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 静态只能访问静态

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
java基础知识随身记
2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这