【Java基础系列】第1章 初识Java
1.1环境搭建
1.1.1下载安装JDK
官方网站下载JDK (www.sun.com 或者 www.oracle.com)
选择Downloads---JavaSE-----选择接受------下载符合电脑操作相同的版本
安装JDK
下一步------------关闭公用JRE,选择安装目录--------------下一步
1.1.2Java环境变量配置
(1)我的电脑----属性----高级配置------环境变量
①系统变量名:JAVA_HOME
变量值:JDK安装目录(如C:\Program Files\Java\jdk1.8.0_92\)
②系统变量名:path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre;
---------------------------使用eclipse工具需要增加以下配置的环境-------------------------
③系统变量名:CLASSPATH --------------这个变量需要新建
变量值:.;%JAVA_HOME%\lib\tools.jar
④系统变量名:path
变量值:eclipse工具要使用的platform-tools;地址
如:E:\android\adt-bundle-windows-x86_64-20140702\sdk\platform-tools;
1.1.3检查搭建结果
运行------cmd
命令:java -version : 检查JDK安装是否成功,查看安装的JDK版本。
javac : JDK环境变量的配置是否成功。
1.1.4 Dos的常用指令
1、记事本写代码运行方法
(1)将.txt后缀名改为.java
(2)打开cmd,用cd找到.java文件所在文件夹
(3)编译 javac 类名.java
(4)编译 javac -d .类名.java 或者 javac -d ./类名.java
(将java类编译到对应的包,前提是该类中第一行有定义包:package com.java;)
运行 java 类名
清除 cls
从一个文件夹转到另一个文件夹 cd ..\要进的文件夹
查看内部类编译文件中的final池 javap -c 内部类编译出的class文件名
2、cmd查找文件
cd.. 后退
cd 文件名 前进
D: 打开d盘
D:dir 查看d盘里的内容
1.1.5内存分析
①heap(堆)
放创建出来的对象,即new出来的东西
②stack(栈)
放临时变量,即局部变量
③data segment 静态变量字符串常量
数据段(data segment)通常是指用来存放程序中已初始化的全局变 量的一块内存区域。数据段属于静态内存分配
④code segment 存放代码
代码段,程序要运行,当然要把代码移进内存
◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)
◆堆:存放用new产生的数据
◆静态域:存放在对象中用static定义的静态成员
◆常量池:存放常量
◆非RAM存储:硬盘等永久存储空间
◆Java内存分配中的栈
函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配
栈特点:
Java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,
该内存空间可以立即被另作他用。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。
◆Java内存分配中的堆:
堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动 垃圾回收器来管理。
◆堆与栈的优缺点?
堆优点:可以动态地分配内存 大小,生存期也不必事先告诉编译器,因为它是在运行时动 态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。
堆缺点:由于要在运行时动态 分配内存,存取速度较慢。
栈优点:存取速度比堆要快,仅次于寄存器,栈数据可以共享。
栈缺点:存在栈中的数据大小与生存期必须是 确定的,缺乏灵活性。
◆常量池 (constant pool)
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。
如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期 (new出来的)才能确定的就存储在堆中。
java中基本类型的包装类的大部分都实现了常量池技术,这些类是
Byte,Short,Integer,Long,Character,Boolean,
另外两种浮点数类型的包装类则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负责创建和管理大于127的这些类的对象。
*基本类型:基本类型创建后,赋值是直接赋值在栈中,不会在堆中创建对象引用。
如:int i=2;
char c=’q’;
*引用类型:引用类型创建后,会在堆中生成对象,赋值后,会指向常量区的该值地址
如:String[ ] arr=new String[ ]{“aa”,”bb”,”cc”};
String s=“aa”; //在堆中创建一个对象
String ss=new String[ ]{“aa”}; //在堆中创建两个对象
Int[ ] arr2=new int[ ]{2,1,5,3};
1.3变量
按照作用域分:
(1)成员变量:在类里定义,作用于整个类
(2)局部变量:在方法里定义,只能作用于当前方法体
定义格式: ①修饰符 数据类型 名字;
②修饰符 数据类型 名字=值;
③数据类型 名字;
④数据类型 名字=值;
(数据可以发生改变时用变量)
1.4常量
定义格式: ①修饰符 final 数据类型 名字=值;
②final 数据类型 名字=值;
常量的命名建议用大写字母。(固定的数据,不希望被改变的数据用常量定义)
常量在定义的时候必须给予赋值。
1.5访问权限修饰符
修饰符 |
同一个事物(对象) |
同一个包 |
不同包 |
其他的 |
private |
√ |
|||
default(默认) |
√ |
√ |
||
protected |
√ |
√ |
√(仅限子类) |
|
public |
√ |
√ |
√ |
√ |
类修饰符 |
public、不填 abstract、final (互斥,二选一) static可以修饰内部类 |
成员变量修饰符 |
不可用:abstract static、final (可同时出现) public、protected、默认、private |
行为方法修饰符 |
static abstract、final (互斥,二选一) public、protected、默认、private |
1.5.1 static 内存位置固定的,静态的
①static修饰的数据表示静态数据,在内存里有固定的位置;
非静态数据,在内存里没有固定的位置。
静态成员是属于类的,区别于个别对象,可以在本类或者其它类调用
②静态属性:
静态变量:无论实例化多少次,只要在一次运行中,静态变量都是累加
非静态变量:每次实例化都会自动恢复为原来的值
③静态方法:
静态方法:只能够去调用静态属性和方法,不能调用直接非静态属性和方法;在静态方法中不可以使用this关键字
非静态方法:可以去调用静态属性和方法,因为静态属性和方法会先被编译再到非静态的被编译(但不能在非静态方法体内创建static静态属性或方法),也可通过this访问静态属性或者方法。
④区别静态成员与非静态成员调用方法
静态成员的调用方法:
(1)类名.静态成员 ( 调用静态属性或者静态方法推荐使用 )
(2)对象名.静态成员 ( 也可以使用,但是不推荐 )
非静态成员的调用方法:
对象名.静态成员 ( 非静态成员调用只能用此方法 )
1.5.2 final 不可修改的,不可继承的
①final修饰的类,该类不能被继承
②final修饰的方法,该方法不能被重写,但可以被继承
③final 修饰属性值,该属性不能被修改
1.5.3 abstract 框架的,抽象的
【Java基础系列】第1章 初识Java相关推荐
- [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理
参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...
- 夯实Java基础系列11:深入理解Java中的回调机制
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 夯实Java基础系列14:深入理解Java枚举类
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 夯实Java基础系列18:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 夯实Java基础系列23:深入理解Java继承、封装、多态的底层实现原理
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- Java基础语法(一)——初识Java
文章目录 一.Java语言概述 1.Java是什么 2.Java 的流行性 3.Java 的特性 (1) 简单性 (2)面向对象 (3) 分布式(微服务) (4) 健壮性 (5) 安全性 (6) 可移 ...
- 【Java基础系列教程】第八章 Java面向对象详解(三)_抽象类、接口、内部类、深拷贝与浅拷贝
一.JavaBean规范 1.1 什么是JavaBean JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中.特点是可序列化,提供无参构造器,提供getter方法和 ...
- Java基础教程【第一章:Java概述】
章节目录 1. JAVA 的发展史 2. JAVA 面向对象 3. JAVA 语言介绍.语言特性 4. JVM 虚拟机 1."一次编译,到处运行"的原理 2.JDK( Java D ...
- Java基础教程【第二章:Java数据类型和变量】
章节目录 1.java 的内存划分 1.1 内存空间 1.2 栈空间 1.3 堆空间 2. 变量 2.1 变量和字面量 2.2 变量的命名 2.3 注意点 2.4变量的定义 2.5.变量的初始化 2. ...
- Java基础系列五 面向对象程序设计
Java基础系列第一章 初识Java语言 Java基础系列第二章 Java语言基础 Java基础系列第三章 Java流程控制 Java基础系列第四章 Java数组与字符串 Java基础系列第五章 面向 ...
最新文章
- Oracle、SQL Server、MySQL分页方法
- python对文件的读写操作方式-python 文件读写操作
- Java程序员需要掌握的计算机底层知识(二):操作系统、内核、用户态与内核态、系统调用的执行过程
- Extjs09 双击事件
- Linux shell中的一个问题 ${}带正则匹配的表达式
- win7计算机个性化设置,笔记本电脑windows7系统如何用好电脑个性化设置
- python继承语法_python中继承父类的例子(python3的语法)
- 操作系统——实验壹——熟悉Linux基础命令及进程管理
- r 语言初学者指南_阻止自然语言处理的初学者指南
- SQL Server 2012软件安装教程
- 2023河海大学计算机考研信息汇总
- Allegro PCB封装库(分类、命名很规范,已验证)
- Vlan的access、trunk以及hybird接口配置实验
- unity 导入 obj 模型 和 json 数据
- python爬虫:批量下载qq空间里的照片(二)
- jeecgboot示例程序
- leetcode 506. Relative Ranks(python)
- 选项不属于HTML语言特点,JavaScript选择题
- Vue技术栈(全家桶)
- level2买股技巧_同花顺Level-2教你看清个股真实交易数据