【Java】Java复习笔记-第一部分
配置java环境变量
- JAVA_HOME:配置JDK的目录
- CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码)
- PATH:指定可执行程序的位置
LINUX系统
(在" .bash_profile "下的环境变量设置)
JAVA_HOME=/opt/jdk1..0_06
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin:.
export JAVA_HOME CLASSPATH PATH
将指定的环境变量声明为全局的
windows系统
右击我的电脑-->属性-->高级-->环境变量
Java的运行过程
- 编译:生成可执行文件,如C++中利用g++生成a.out,效率高,但不跨平台
- 解释:解释器把源文件逐行解释,跨平台但效率不高
在java中:先编译后解释,把.java文件编译成.class字节码文件
- Java源代码文件(.java文件)--->
- Java编译器(javac)--->
- Java字节码文件(.class文件,平台无关的)--->
- Java解释器(java),执行Java字节码
Java的垃圾回收
由一个后台线程gc进行垃圾回收
虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收
- 缺点:不能够精确的去回收内存
java.lang.System.gc(); 建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收
- 内存中什么算是垃圾:不在被引用的对象(局部变量,没有指针指向的)
java的安全性
- 沙箱机制:只能做沙箱允许的操作
通过下面环节,实现安全
- 加载有用的类文件,不需要的不加载
- 校验字节码,查看允许的操作
- 查看代码和虚拟机的特性是否相符
- 查看代码是否有破坏性
- 查看是否有违规操作,如越界
- 查看类型是否匹配,类型转换是否能正确执行
源程序
package mypack; //相当于一个目录 public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(“Hello World”);
}
}
注:
1、文件名必须和public修饰的类名一致,以.java作为文件后缀,如果定义的类不是public的,则文件名与类名可以不同。
2、一个.java文件中可以有多个class,但是只有一个public修饰的类。
3、java源代码文件编译后,一个类对应生成一个.class文件
4、一个java应用程序应该包含一个main()方法,而且其签名是固定的,它是应用程序的入口方法,可以定义在任意一个类中,不一定是public修饰的类
编译
javac -d . HelloWorld.java
含有包的类,在编译的时候最好用上面的格式,-d指的是让该类生成的时候按照包结构去生成," . "指的是在当前路径下生成
如果不用上面的格式,也可以用javac HelloWorld.java,但是需要注意的是包结构就要由自己去建立,然后将生成的.class文件放到该目录下
执行
java mypack.HelloWorld
将字节码文件交给Java虚拟机去解释执行
需要注意的事,必须使用包名.类名去解释执行
包(package)
把源文件放在目录下
由于工程的需要,将不同的源文件放在不同的目录下,从而引入了包。
- 包可以看作就是一个存放java源文件的目录。
在源码中声明一个包名:package p;(只能放在第一行,且最多只能是一行)
如果指定多层包,那么在包名之间我们可以用.作为分隔符:package p1.p2.p3.p4;
用“javac HelloWorld.java –d 绝对路径”,编译后生成的字节码文件就会放在指定的包结构下
- 执行该程序需要用" java 包名.类名 "
- 引进包中的某个类:import 包名.类名;
- 引进包中的所有类:import 包名.*;
注释
- // 单行注释, 到本行结束的所有字符会被编译器忽略
- /* */ 多行注释, 在/* */之间的所有字符会被编译器忽略
- /** */ 文档注释, java特有的,在/** */之间的所有字符会被编译器忽略
可以用javadoc把java源程序中这种注释抽取出来形成html页面(只有写在包,类,属性,方法,构造器,引入之前的注释才可以进行抽取)
标识符
命名规则
- 由字母、数字、下划线、$组成,不能以数字开头
- 大小写敏感
- 不得使用java中的关键字和保留字
关键字
- 都是小写的
jdk1.2多了strictfp(经准浮点型),关键字 jdk1.4多了assert(断言)关键字, jdk1.5多了enum(枚举) 关键字
随着学习进度,会慢慢接触到的
- true、false、null严格说不应该算关键字,应称其为保留字更合适
习惯
- 标识符要符合语义信息
- 包名所有字母小写
- 类名每个单词首字母大写,其它小写 //TarenaStudent
- 变量和方法:第一个单词小写,从第二个单词开始首字母大写 //tarenaStudent
- 常量:所有字母大写,每个单词之间用" _ "连接
基本数据类型:8种
1) 整型
- byte 1B 8位 -128到127
- short 2B 16位 -2^15到(2^15)-1
- int 4B 32位 -2^31到(2^31)-1
- long 8B 64位 -2^63到(2^63)-1
2) 浮点类型
- float 4B 32位
- double 8B 64位
3) 字符类型
- char 2B 16位
4) 布尔型 1B
- boolean false/true
注
- Java中的自动类型提升问题。
1)、正向过程:从低字节到高字节可以自动转换。
byte->short->int->long->float->double
2)、逆向过程:从高字节到低字节用强制类型转换。
例:int a = (int)4.562;
注:逆向转换将丢失精度。
- boolean:只有true和false。
- char:Java中用" \u四位十六进制的数字 (即使在注释中出现\u,后面如果跟的不是4个数字,也会报错)"表示将字符转换成对应的unicode编码,字符类型要用单引号括起来。
- 黙认浮点类型为double,float数据类型有一个后缀为" f "或" F "。
- long类型有一个后缀,为" l " 或者" L "
引用数据类型
- 类、接口、数组
引用类型 变量名 = new 引用类型名(参数); //new后面一般跟的都是类的构造器
成员:写在类体括号里面的
内存空间的分配
内存分为:
- 栈:存放简单数据类型变量(值和变量名都存在栈中),存放引用数据类型的变量名以及它所指向的实例的首地址
- 堆:存放引用数据类型的实例
局部变量
- 不是声明在类体括号里面的变量
- 必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值
- 作用范围:定义开始到定义它的代码块结束
- 同一范围内,不允许2个局部变量命名冲突
- 参数传递时,简单类型进行值转递 (参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)
自动类型提升
byte a = 1;
byte b = 2;
a = a+b; //编译出错自动类型提升成int
a += b; //自加没有自动类型提升问题
类型自动提升规则
a和b作某种运算
- a和b中有double,结果就是double
- a和b中有float,结果就是float
- a和b中有long,结果就是long
- 除此之外,结果都是int
把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;
移位运算符:效率最高
- >> 有符号右移,补符号位
移负数位,则将该数值加32后再进行移位
数值的2进制是按照补码保存的
- >>> 右移后高位都补0
逻辑运算符
- &/|也可以作为逻辑运算符
- && 先判断前面一个条件,如果为假,则不用计算后一个条件
- || 先判断前面一个条件,如果为真,则不用计算后一个条件
" + "运算符
- 两个操作的对象是数值时,是加法
- 如果有一个是字符串时,则是字符串的连接
流程控制语句
同Core C++
- switch中的变量类型只能是byte、 short、int、char四种类型
数组
声明数组:
数组能以下列形式声明:
- 类型[] array;
- 类型 array[];
注
JAVA中推荐用:类型[] array;
- 一个数组是一个对象
- 声明一个数组没有创建一个对象
- 声明时不用指定长度
创建数组
- 创建基本数据类型数组:int[] i = new int[2];
- 创建引用数据类型数组:Student[] s = new Student[100];
- 数组创建后其中的元素有初始值
类型 黙认值
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0l |
| float | 0.0f |
| double | 0.0d |
| char | \u0000 |
| boolean | false |
| reference tyeps | null |
初始化数组
- 创建时一定要指定长度
int[] i2=new int[]; //error
初始化数组:
- 声明、创建、初始化分开:
int[] i; //定义数组
i = new int[2]; //分配空间
i[0] = 0; //初始化
i[1] = 1;
- 声明、创建、初始化在同一时间 :
int[] i = {0,1}; //显示初始化 {}中有几个值,则数组长度为几
Student[] s = {new Student(),new Student()};
注
int[] i=new int[]{1,2,3}; //后面[]中不可以写数值
int[] i1=new int[3]{1,2,3}; //error
二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)
int[][] i1 = new int[2][3];
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3]; //不允许高维没分配空间而先给低维分配空间
int[][] i2 = new int[2][];
i2[0] = new int[2];
i2[1] = new int[3];
数组长度
- 数组的属性length
- 数组长度一旦确定,不可改变
- int[] i = new int[5]; 则i.length= 5
数组拷贝
系统类System提供的
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
- src: 源数组
- srcPos: 从源数组哪个位置开始拷贝(位置指的是元素的下标)
- dest: 目标数组
- destPos: 拷贝的元素放到目标数组的起始位置
- length: 拷贝多少个
数组排序
- 自己实现一个排序方法来进行排序
- 调用java.util.Arrays.sort(Object o)
【Java】Java复习笔记-第一部分的更多相关文章
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- java编程思想笔记(第一章)
Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...
- Java基础知识笔记第一章:入门
java的地位: java具有面向对象,与平台无关,安全,稳定和多线程等优良特性,是目前软件设计中优秀的编程语言. java的特点: 1.简单 2.面向对象 3.平台无关 jre(java runti ...
- java程序设计基础篇 复习笔记 第一单元
java语言程序设计基础篇笔记1. 几种有名的语言COBOL:商业应用FORTRAN:数学运算BASIC:易学易用Visual Basic,Delphi:图形用户界面C:汇编语言的强大功能和易学性,可 ...
- Java基础复习笔记系列 三
前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿. Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...
随机推荐
- JDBC连接方式有哪几种
2011-05-10 目前比较常见的JDBC驱动程序可分为以下四个种类: (1)JDBC-ODBC桥加ODBC驱动程序 JavaSoft桥产品利用ODBC驱动程序提供JDBC访问.注意,必须将OD ...
- sqlserver修改为windows验证登陆, 程序的调整
业务需求, 客户要求sqlserver改为windows验证登陆, sa用户不可用, 程序端如何修改呢? 我在本机做了个测试. 环境: sqlserver2016, springmvc+spring+ ...
- Android开发环境——连接驱动ADB相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- 进阶之路(基础篇) - 019 Serial串口函数说明
本文总结了Arduino常用串口操作函数,函数说明部分来源于Arduino 官网串口使用指南,示例与实验部分为自编.本文是对Arduino串口操作函数的较全面总结,可作为工具贴查找使用. 函数:if( ...
- OAuth2.0实战之微信授权篇
微信开发三大坑: 微信OAuth2.0授权 微信jssdk签名 微信支付签名 本篇先搞定微信OAuth2.0授权吧! 以简书的登陆页面为例,来了解一下oauth2.0验证授权的一些背景知识: 1) 传 ...
- OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面
在处理文件前需要引入OpenCV库,同时也引入unmpy库 import cv2 import numpy as np 1 基本的读写操作 1.1 图像文件的读写操作 1.1.1 图像文件的读取操作 ...
- 简单获取cpu使用率,以及后台运行的问题
做了一个运维平台,有一个功能定时执行一个脚本,获取cpu使用率和内存使用情况到监控平台. 获取cpu使用率使用的是top中的信息.直接运行没有问题.通过nohup xxx.sh & 之后获取不 ...
- org.hibernate.exception.ConstraintViolationException: could not insert:
org.hibernate.exception.ConstraintViolationException: could not insert: 报错原由于xxx.hbm.xml文件里的主键类型设置有问 ...
- 【转载】Hibernate之hbm.xml集合映射的使用(Set集合映射,list集合映射,Map集合映射)
https://www.cnblogs.com/biehongli/p/6555994.html
- python3 bytes 和 string转换
转自:http://www.jb51.net/article/105064.htm 前言 Python 3 最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分. 文本总是 Unicode,由 ...