1.Java概述

首先,Java是一门面向对象的编程语言。相对于C/C++等语言,Java中没有指针,但是这不代表指针等知识不重要;Java中不存在多继承但是存在多接口。在我自己的学习过程之中,我偏向于实现接口的方式进行编程,因为Java不支持多继承,而支持多接口。

Java具有跨平台开发的特点。Java可以编写桌面应用、Web应用程序、分布式系统和嵌入式系统等应用程序等。我主要是往Web应用程序学习。

2.Java命名习惯

包名:统一小写 例如:org.study.pojo(三个文件夹)

常量名:所有字母大写

变量名:首字母小写,后面单词首字母大写

类名:单词首字母大写

3.基本数据类型

常用的Java数据类型主要是8个基本数据类型

8个基本数据类型

byte:Java中最小的数据类型,占用8位(bit),1字节;取值范围为-128~127,默认值为0

short:短整型,占用16位内存,默认值为0

int:整型,占用32位内存,默认值为0

long:长整型,占用64位内存,默认值为0L;注意,在进行long类型变量的声明的时候,如果数值过大需要在数据后面加上L;

float:浮点数(浮点型),占用32位内存,默认值为0;注意,在进行float类型变量的声明的时候,如果后面有小数点则需要在数据后面加上一个f,否则编译器会进行报错

double:双精度浮点类型,占用64位内存,默认值为0;

char:字符型,用来存储单个字符,占用16位,2个字节,默认值为null

boolean:布尔类型,占用1个字节,只有两个值为true、false,默认值为false

4.Java中引用类型

  常见的引用类型有:String、数组、类、接口、枚举等

  4.1关于这个问题,先看看所谓的Java引用是什么?

  引用的基本概念:如果申明一个变量的类型是一个类而不是一个基本类型,则就称为这个变量为引用;一般情况下,当一个对象没有引用的时候会被垃圾回收机制所清理(GC)。而根据引用的强弱关系,可以将对象的引用级别划分为:强引用(使用new进行申明)、软引用、弱引用、虚引用。

  这时候可能还会存在糊涂,什么是对象、什么是引用。

  4.2对象与引用感觉是同一个?

  举例说明

    Student student = new Student();

  看上面我们new了一个对象(蓝色部分为申明了一个Student对象),变量student由Student类进行申明,所以student变量是一个引用。

  4.3关于强引用、软引用、弱引用、虚引用(关于底层还是不曾了解,学习GC机制后回来书写实例)

    4.3.1强引用

      强引用是java中最常见的引用类型,一般是new出来的对象;如果对象是强

     引用,则垃圾回收机制不会对其进行回收,Java虚拟机情愿抛出异常错

     (OutOfMemoryError)也不会回收。

      如果对象需要进行回收的话,可以手动将引用设置为null,这样对象就会在合

     适的时候被垃圾回收器进行回收(GC回收机制是在对象没有引用的时候会自动

     的进行回收)。

    例如:Student student = null;这样,对象没有了引用,则垃圾回收机制则会在合适的时候将对象进行回收。

    4.3.2软引用

      用来描述有用但并不是必须的对象,对于软引用所申明的对象,在JVM内存不够的情况下,会自动回收这个对象。这个特性很适合用来实现缓存。

    4.3.3弱引用

      通常用来描述非必需对象,当JVM进行垃圾回收的时候会自动的回收这个类型的对象。当然也可以通过显示的进行回收Systrm.gc();【这句话的意思是通知JVM进行垃圾的回收,但是JVM并不会立即执行回收机制】

    4.3.4虚引用

      虚引用的话,和没有引用关联的对象差不多,随时都可能会被垃圾回收机制进行回收。由于随时可能会被回收,所以可以利用这个特性来监听垃圾回收机制是什么时候执行的。

5.Java的值传递

  网上存在着两种说法:一、Java即存在值传递也存在引用传递   二、Java只存在引用传递。

  值传递:将数据的值拷贝一份传入参数

  那么,哪种说法是真确的呢?我们先写一个代码

  

public class TestString01 {
public static void change(String str,char[] ch,int number){
str = "方法中的值";
ch[1] = 'a';
number = 100;
} public static void main(String[] args) {
String str = "主方法";
char[] ch = new char[]{'1','1','1'};
int number = 10;
//调用方法
change(str,ch,number);
System.out.println("字符串:" + str + " " + "数组:" + ch[1] + " " + "数字" + number);
}
}

  运行结果为

  其中number是基本类型,String与数组都是引用类型,为啥结果过都不一样呢?这就关系到Java中数据在内存中的存储机制了

6.Java数据的存储机制

  栈:每一个线程包含一个栈区,栈中指保存基本数据类型的值和对象引用以及基础数据的引用

  堆:存储对象,JVM只有一个堆,这个堆会被所有的线程共享,只存放对象本身而不存在对象的引用

  方法区(静态区):被所有的线程共享,存放class文件以及static变量与方法

  常量池:jdk1,6常量池放在方法区、jdk1.7常量池放在堆内存、jdk1.8放在元空间里面,和堆相独立

 

    这也就是为什么基本数据类型在进行传递之后,主函数的值没变的原因。

  再来看一看数组的引用类型:

  由此可见,所谓的引用传递其实传递的也是一个值,只不过这个值是一个地址。既然是引用传递,那为什么String的值没有改变呢?

  我们先来看看String的代码:

  这里有两个final,第一个存在于class之前,代表了这个类不能被继承;第二个final则是我们的数据了,由于它使用了final修饰符,所以String所定义的数据是一个常量;常量保存在常量池中,不会被更改;所以当执行更换方法的时候,它并不会更改原有的值,而是会重新开辟一块空间并指向这块空间的地址。而原来main中的String还是指向原来的地址,所以数值没有发生改变。图解如下:

Java学习之一(引用相关)的更多相关文章

  1. Java学习之强引用,弱引用,软引用 与 JVM

    1.java内存管理分为内存分配和内存回收,都不需要程序员负责. 2.垃圾回收的机制主要是看对象是否有引用指向该对象.  java对象的引用包括  强引用 软引用 弱引用 虚引用 3.强引用 是指创建 ...

  2. Java学习|强引用,软引用,弱引用,幻想引用有什么区别?

    在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用:Java中根据其生命周期的长短,将引用分为4类. 1 强引用 特点:我们平常典型编码Object obj = new Objec ...

  3. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  4. Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)

    Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...

  5. Java学习笔记之深入理解引用

    引言:Java中数据传递的方式,除了基本数据类型是按照值传递,其它类型全部是按照引用传递,这和C++有很大区别,但是很多网上文章都解释的不清楚,甚至是错误的,在查阅资料之后,下面整理出一个比较容易理解 ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. Java学习笔记(十六)——Java RMI

    [前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...

  8. Java学习总结:飘逸的字符串

    Java学习:飘逸的字符串 前言 相信不管我们运用Java语言来开发项目还是进行数据分析处理,都要运用到和字符串相关的处理方法.这个社会处处有着和字符串相关的影子:日志.文档.书籍等.既然我们离不开字 ...

  9. Java学习-034-JavaWeb_003 -- JSP page 指令

    前文对 JSP 的基础知识进行了初步的讲解,此文主要讲述 JSP page 指令. page 指令用于定义页面的多种属性,例如:脚本语言.编码方式.导入的 Java 包等,page 执行的语法如下: ...

随机推荐

  1. 2019-8-31-dotnet-数组自动转基类数组提示-Co-variant-array-conversion-是什么问题

    title author date CreateTime categories dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题 lindexi ...

  2. 流计算与Hadoop

  3. VBA中msgbox的用法小结

    1.作用在消息框中显示信息,并等待用户单击按钮,可返回单击的按钮值(比如“确定”或者“取消”).通常用作显示变量值的一种方式.2.语法MsgBox(Prompt[,Buttons][,Title][, ...

  4. 导出sheet到新文件夹当中

    Sub 导出当前客户达成分析()Application.ScreenUpdating = FalsemyName1 = Sheets("日期统计表").Range("B1 ...

  5. Android开发 MediaPlayer播放raw资源MP3文件

    代码 private MediaPlayer mRingPlayer; /** * 播放铃声 */ private void startRing(){ if (mRingPlayer != null) ...

  6. JS的十大经典算法

    冒泡排序(Bubble Sort) 冒泡排序须知: 作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉...冒泡排序还有一种优化算 ...

  7. css---动画封装

    animation-name 属性指定应用的一系列动画,每个名称代表一个由@keyframes定义的动画序列 值: none 特殊关键字,表示无关键帧. keyframename 标识动画的字符串 a ...

  8. Cut the Sequence

    Cut the Sequence 有一个长度为n的序列\(\{a_i\}\),现在求将其划分成若干个区间,并保证每个区间的和不超过m的情况下,每个区间的最大值的和的最小值,\(0 < N ≤ 1 ...

  9. Servlet & Filter 执行原理

    一.Servlet的两个Map 当请求到达后,web容器是如何查找Servlet的呢?执行流程又是什么? 可能很多人和我一样,只知道在web,xml中配置拦截规则,然后反射+映射就完事了? 当Serv ...

  10. create table常用命令

    CREATE TABLE students( stuID INTEGER NOT NULL , stuname ) not null, sex int NOT NULL ); CREATE TABLE ...