Thank in Java
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的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- Spring框架的IOC(控制反转)
1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制, ...
- Head First 设计模式 —— 04. 工厂 (Factory) 模式
思考题 如何将实例化具体类的代码从应用中抽离,或者封装起来,使它们不会干扰应用的其他部分? P111 将实例化具体类的代码放入一个对象中管理,通过不同入参决定实例化具体的类 简单工厂 不是23种GOF ...
- EF Core CodeFirst数据库自动迁移
开发过程中都会遇到数据库数据结构更新的问题,怎么对数据库更新进行版本控制呢? 不同的项目对数据库版本更新控制的方式不同,常用的有第三方Evolve,开发人员将数据库更新脚本按照版本号的放在一起,然后执 ...
- python作业完成简单的文件操作
题目 请创建以学号命名的目录,在该目录中创建名称为file1.txt的文件,并将自己的个人信息(序号.姓名以及班级)等写入该文件:然后并读取文件中的内容到屏幕上:接着重新命名该文件为file2.txt ...
- 在MongoDB中执行查询与创建索引
实验目的: (1)掌握MongoDB中数据查询的方法: (2)掌握MongoDB中索引及其创建: 实验内容: 一. MongoDB中数据查询的方法: (1)find函数的使用: (2)条件操作符: a ...
- disfunc绕过
绕过DisFunc的常见小技巧 解析webshell命令不能执行时的三大情况 一是 php.ini 中用 disable_functions 指示器禁用了 system().exec() 等等这类命令 ...
- Databricks 第7篇:管理Secret
有时,访问数据要求您通过JDBC对外部数据源进行身份验证,可以使用Azure Databricks Secret来存储凭据,并在notebook和job中引用它们,而不是直接在notebook中输入凭 ...
- 负载均衡和故障转换(Failover)的连接RAC方法
TAF:Transparent Application Failover,透明的应用切换,即在切换的过程中,用户感知不到.可以实现会话的切换(无法实现事务的切换,即没有提交的事务会回滚),即在不断开连 ...
- SAP中用户口令状态的一点说明
数据元素:XUPWDSTATE 数值 内涵 -2(通常)不能更改口令.-1(每天只允许一次)今天不能更改口令.0可以更改口令,但没有必要更改.1口令为初始值必须更改口令.2口令过期必须更改口 ...
- 在HTML中改变input标签中的内容
在HTML中改变input标签的内容 1.使用js自带的方法: document.getElementById('roadName').value='武汉路';//通过标签选择器来选择标签,然后设置值 ...