Think in Java

2.一切都是对象

2.1 引用操作对象

  • Java 中一切都是对象,因此可以采用单一固定得语法。
  • 操作对象得标识符实际上是对对象得一个 “引用”reference“。例如 遥控器 (引用)操纵电视(对象)
  • 即使没有电视剧 , 遥控器 也可独立存在
  • 创建引用的同时便进行初始化 String s = "abcd"
  • 创建了引用 让它与一个新的对象相关联。 new "给我一个对象" String s = new String("abcd");

2.2.存储到什么地方

  • 5 个地方可以存储数据

    • 寄存器:最快的存储区, 处理器内部 不能直接控制,根据需求分配
    • 堆栈:RAM中 (随机访问存储器)中,堆栈指针 可以从处理器哪里获得直接指出,向下移动分配新内存,向上移动,释放内存。仅次于寄存器 。Java系统必须知道存储再堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些 Java 数据存储再堆栈中,特别是 对象的引用 ,Java对象不存储其中
    • : 通用的内存地址 RAM区中 编译器不需要知道存储的数据再堆里存活了多长时间。 new一个对象 的时候,会自动再堆里进行存储分配。但是:用堆进行存储分配和清理可能比用堆栈需要更长的时间
    • 常量存储ROM只读存储器 常量值通常直接存放在程序代码内部,这样做是安全的,永远不会改变。
    • 非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序控制,在程序没有运行时也可以存在。流对象和持久化对象

2.3 基本类型

基本类型占存储空间的不变性,比大多数语言编写程序更具有移植性的原因

![image-20210121110830418](E:\Work File\Typora\Think of Java\基本类型.png)

数组

​ 当创建了一个数组对象时,实际上是创建了一个 引用数组,并且每个引用都会被自动被初始化为一个特定的值, Null当Java看到Null ,就知道这个引用还没有指向某个对象。在使用任何引用前 ,需要为其指定对象。如果使用是 还是 Null,Java会报错。 存放基本类型的数组,初始化为 0.

2.4 永远不要销毁对象

​ 变量生命周期的概念,占据了程序设计工作中非常重要的部分。变量存活多久?如何销毁?什么时候销毁?什么周期混乱 会引起大量的程序Bug。Java 替我们完成了所有的清理工作。

2.4.1 作用域

  • ​ 大多数过程型语言都有作用域(scope)的概念。
  • ​ Java 由new创建的对象 ,只要你需要 就 一直存在
    • ​ Java有垃圾回收机制,监视 new 创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间。(不必担心内存回收问题,你只要创建对象,一旦你不需要,自行消失

2.4.2 类

Java 中你所做的全部工作就是定义类,产生哪些类的对象,以及发送消息给这些对象

  • class 创建 一个 类
  • new 一个对象
  • 类中的元素
    • 字段 (数据成员)
    • 方法 (成员函数)
  • Java中方法只能作为类的一部分来创建。方法只有通过对象才能调用,且这个对象必须能执行这个方法调用。
  • 你想使用 程序里面预先定义好的类 Import

2.4.3 static 关键字

static 字段对每个类来说都只有一份存储空间,非static字段则是对每个对象有一个存储空间,这一点对main 方法很重要 ,程序的入口

重要用法:

  • 声明一个事物是static就意味这这个域或者方法不会包含它的那个类的任何对象实例管理在一起

  • 未创建某个类的任何对象,也可以调用static方法,访问其static域

    class StaticTest{
    static int i = 47;
    }
    StaticTest st1 = new StaticTest();

    调用方法:

    • st1.i
    • StaticTest.i ++

调用静态方法和调用静态变量相似

2.4.4 第一个 Java程序

Java最强大的优势就是,他又庞大的标准类库

// 打印日期
System.out.println(new Data());

​ 传递的参数 是一个 Data对象,一旦创建它之后,就可以直接将它的值(自动转换为String类型)发送给println().当这条语句被执行完毕之后,Data对象就不再被使用,而垃圾回收器会发现这一情况,并再任意时候将其回收

2.4.5 Javadoc

​ 提取注释工具 /** */ 只能为 public 和 protected 成员进行文档注释。因为 public 和 protected 能再文件之外被使用。 private 可以用 -privateb标记

标签

  • @see 引用其他类文档
  • @link 超连接文本
  • @docRoot 文件树页面的显示超链接
  • @inheritDoc 从基类中继承相关的文档到当前类中
  • @version 格式如下 @version version-information 提取版本信息
  • @author author - information 提取作者信息
  • @since 此类支持的JDK版本
  • @param 方法文档中
  • @return 方法文档中

2.5 编码风格

类名 驼峰原则

课后题

public class 练习1 {
static int i;
static char c; public static void main(String[] args) {
System.out.println("int = " +i);
System.out.println("char = " + c);
}
} ===============================
int = 0
char =
class StaticTest{
static int i = 47;
}
class Incrementable{
static void increment(){
StaticTest.i++;
}
} public class 练习8 {
public static void main(String[] args) {
System.out.println("StaticTest.i = "+StaticTest.i);
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
// i+1
Incrementable.increment();
System.out.println("StaticTest.i = "+StaticTest.i);
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i);
//st1.i = 3
st1.i = 3;
System.out.println("StaticTest.i = "+StaticTest.i);
System.out.println("st1.i="+st1.i);
System.out.println("st1.i="+st2.i); StaticTest st3 = new StaticTest();
System.out.println("st3.i="+st3.i); }
} ============================
StaticTest.i = 47
st1.i=47
st1.i=47
StaticTest.i = 48
st1.i=48
st1.i=48
StaticTest.i = 3
st1.i=3
st1.i=3
st3.i=3 Process finished with exit code 0

第九题

在java语言中,有一种自动包装机制,它的主要作用是用于将基本类自动转换成与基本类对应的包装类,以便将基本类可以应用于容器中,而不用程序手动建立包装类,使编程过程更加简单,还可以减少错误。

基本类型和包装器类型对应表:

基本类型 包装类型

boolean Boolean

char Character

byte Byte

short Short

int Integer

long Long

float Float

double Double

void Void

public class 练习9 {
public static void main(String[] args) {
boolean a = false;
Boolean A = a;
System.out.println(a);
System.out.println(A);
int b = 1;
Integer B = b;
System.out.println(b);
System.out.println(B);
}
} ========================================
false
false
1
1
public class 练习10 {
public static void main(String[] args) {
System.out.println("args[0] = " + args[0]);
System.out.println("args[1] = " + args[1]);
System.out.println("args[2] = " + args[2]);
}
}

Thank in Java的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  10. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

随机推荐

  1. 编写 Dockerfile 生成自定义镜像

    一般情况下我们可以从公共渠道诸如 DockerHub 获取镜像上获取镜像,但是在实际生产过程中,往往需要定制化的镜像,例如修改一些配置文件,增加一些特殊的命令或软件等需求,这时就需要通过编写 Dock ...

  2. 【项目实践】SpringBoot三招组合拳,手把手教你打出优雅的后端接口

    以项目驱动学习,以实践检验真知 前言 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个 ...

  3. 从 Java 代码到 CPU 指令

    从 Java 代码到 CPU 指令 我们都知道,编写的 Java 代码,最终还是要转化为 CPU 指令才能执行的.为了理解 Java 内存模型的作用,我们首先就来回顾一下从 Java 代码到最终执行的 ...

  4. 线程专题 -- 线程池,ThreadPoolExecutor

    什么是线程池? 为什么要使用它? 线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入"池"中,当有任务来临时就可以重用已有的线程,无需 ...

  5. VsCode通过SSH连接远程服务器开发

    前言 nil 正文 安装插件 安装VsCode官方插件 Remote - SSH Remote - SSH: Editing Configuration Files WSL(远程桌面连接需要Remot ...

  6. 【MySQL 基础】MySQ LeetCode

    MySQL LeetCode 175. 组合两个表 题目描述 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+----- ...

  7. 解决Establishing SSL connection without server‘s identity verification is not recommended.

    每次从数据库中进行查询或者其他操作控制台都会出现以下警告,虽说不是error,但是很显眼.. WARN: Establishing SSL connection without server's id ...

  8. Centos 6 下安装 OSSEC-2.8.1 (一)

    ossec -2.8.1 安装: ## 1 ) 安装依赖包: RedHat / Centos / Fedora / Amazon Linux yum install -y pcre mysql mys ...

  9. MyBatis初级实战之二:增删改查

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  10. Java编译期注解处理器详细使用方法

    目录 Java编译期注解处理器 启用注解处理器 遍历语法树 语法树中的源节点 语法树节点的操作 给类增加注解 给类增加import语句 构建一个内部类 使用方法 chainDots方法 总结 Java ...