Java7编程高级进阶学习笔记
本书PDF 下载地址: http://pan.baidu.com/s/1c141KGS 密码:v6i1
注:本文有空会跟新;
讲述的是jdk7的内容;
注关于java 更详细的内容请进入:《Java 8编程官方参考教程(第9版).pdf》学习笔记 进行学习
第1章Java简介
1:为什么使用Java
1:java 诞生时C++太费电脑资源,不方便嵌入式移植
2:java 编写一次到处运行
2:什么是Java
java 是一门编程语言,移除了内存管理、安全性这类复杂的特性,转而将这些任务交给了虚拟机管理。
3:Java虚拟机
java编译器将java源程序编译成二进制“伪CPU指令构成”的字节码。Java虚拟机仿真了虚拟CPU,为java可执行文件提供了运行环境、字节码解释器、验证器。其中验证器用于内存
管理、线程管理等其他用途。JVM本质是能够运行Java可执行文件的机器。java编译文件以“.class”形式结尾。
4:Java特性
1:体积小
2:简单易学
3:面向对象
4:兼具编译与解释特性
5:与运行平台无关
6:执行安全
7:支出多线程
8:动态特性:内省(introspection) 反射(reflection)
5:ava的演变过程
1: 1996年1月23日):代号Oak
1: 提供了类库
2:提供applet互联网小程序
2:JDK1.1(1997年2月19日)
1:引入javaBean 组件。
2:引入 远程方法调用。让客户端调用运行在远程服务器的应用程序
3:jar文件格式
4:数字签名
5:AWT增强
6:其他改动
3:JDK1.2(1998年12月8日):代号Playground
1:引入Swing 图形编辑类库
2:提供 2D API
3: 实现拖拽功能
4:音频增强
5:引入 java平台上的ORB 对象请求代理实现类库
6:安全增强
7:其他增强
4:JDK1.3(2000年5月8日):代号Kestrel
5:JDK1.4(2002年2月6日):代号Merlin
6:JDK5.0(2004年9月30日):代号Tiger
7: JDKSE6(2006年12月11日):代号Mustang
8:JDKSE7(2011年7月7日):代号Dolphin
第2章:数组
、
1:数组介绍
1:作用:用来处理相同数据类型的变量集合
2:本质:相同数据类型的元素的集合,其中元算是数组的组成部分。数组中的每个元算可以使用唯一的
索引值(下标)
进行访问。
2:数组声明
1: 声明语法:
type arrayName();
或者是:
type[ ] arrayName ;
3:创建数组
1:示例:
int [ ] numberArray; //声明一个数组类型变量 numberArray ,其数组元素类型为int
numberArray= new int[20] ; //保存10个整数分配了连续内存,并将首个元算内存地址赋值给变量numberArray.数组初始化器为numberArray数组所有元算提供初始化值。
4:访问和修改数组元算
//访问数组元素:就是使用索引来访问数组元算。数组的每个元算都拥有唯一的索引值。数组元素可以使用数组名并跟上方括号内的索引值进行访问。 arrayName[indexValue]; //示例:
int[] num=new int[5];
int a1=num[0];//注意:下标是从0开始算数组总长度个数值的;如果下标不对则会出现 ArrayIndexOutOfBounds异常。
5:初始化数组
1:运行时初始化
//示例:
int[] num_Array=net int[10];
//赋值
num_Array[0]=0;
num_Array[1]=1;
num_Array[2]=2;
...
num_Array[10]=10;
//如果值相同或则有规律可循。往往使用循环比较好用
for(int 1=0;i<10;i++){
num_Array[i]=i+1;
}
2: 使用数字字面量初始化
int[] num_Array={1,2,3,4,5,6,7,78} ;
import java.io.*;
/**
* 显示数组用法程序
*
**/
public class TestScoreAverage { public static void main(String[] args) {
final int NUMBER_OF_STUDENTS = 5;
//final 关键字在程序中创建常量,变量被声明后值不可以再此被改变
int[] marks = new int[NUMBER_OF_STUDENTS];
try {
BufferedReader reader = new BufferedReader(new InputStreamReader( System.in));
for (int i = 0; i < NUMBER_OF_STUDENTS; i++) {
System.out.print("Enter marks for student #" + (i + 1) + ": ");
String str = reader.readLine();
marks[i] = Integer.parseInt(str);
}
} catch (Exception e) {
e.printStackTrace();
}
int total = 0;
for (int i = 0; i < NUMBER_OF_STUDENTS; i++) {
total += marks[i];
}
System.out.println("Average Marks " + (float) total
/ NUMBER_OF_STUDENTS);
}
}
6:for_each 遍历循环数组 取值
//for_each循环可以在不使用元素索引值的情况下遍历整个数组 //这个是jdk5的新特性
for(type varableName :collection){
loopBody
}
具体示例如下:
int[] n ={1,2,3,4,5,6,7,7,7,67,6};
for(int m: n){
System.out.println(m);
}
7: 多维数组
即:指包含数组维数多于1维;可以创建二维、三维和n维数组(1<=n<=255)。
1:二维数组声明和初始化
//----------------------------------------------------------------------------------------
//二维数组:例如一个包含 行与列的表格。其中表格的每一个单元格代表一个数组元算。
//声明格式如下:
type arrayName[][];
type[] [] arrayname; //具体示例如下:
final int n1=5; // 代表行
final int n2=10 ; //代表列 int[ ] [ ] m ;
m=new int[n1] [n2] ; //其元素格值显示:
m[4][5]=5; //-------初始化------------------------------------------------------------------------
//1:运行时初始化
arrayName[row] [col] =data;
//例如:
int [][] m =new int[5][10];'
//数组的单元格可以使用如下程序初始化
m[0][1]=1;
m[0][2]=2;
....
m[5][10]=50 //2:循环初始化 final int r=5;c=10 ;
int [][] m=new int[r][c];
for(int i=o;i<r;i++){
for(int j=0;j<c;j++){
m[r][n]=i*j;
}
} //使用数组字面量初始化
int [][] m={{1,1},{2,2},{3,3},{4,5}};
/**
* 展示使用二维数组的程序
*
**/
public class MultiDimArrayApp { public static void main(String[] args) {
final int MAX_STUDENTS = 50, MAX_SUBJECTS = 3;
int[][] marks = new int[MAX_STUDENTS][MAX_SUBJECTS];
// Adding data to the array
for (int id = 0; id < MAX_STUDENTS; id++) {
for (int subject = 0; subject < MAX_SUBJECTS; subject++) {
marks[id][subject] = (int) (Math.random() * 100);
}
}
// Printing Array
System.out.print("Student\t");
for (int subject = 0; subject < MAX_SUBJECTS; subject++) {
System.out.print("\t" + "Subject " + subject + "\t");
}
System.out.println();
for (int id = 0; id < MAX_STUDENTS; id++) {
System.out.print("Student " + (id + 1) + '\t');
for (int subject = 0; subject < MAX_SUBJECTS; subject++) {
System.out.print("\t" + marks[id][subject] + "\t");
}
System.out.println();
}
}
}
2: 使用 for_each循环
int i=0;
for(int[] a:m){
System.out.println("a"+i+++'\t');
for(int v : a){
System.out.println("\t"+v+"\t");
}
System.out.println();
}
8:N维数组
//三维数组声明
type[][][] arrayName=new type[size][size][ size ] ;
//即:
int [][][]a=new int[1][2][3];
9:非矩形数组
10:确定长度
/**
* 确定数组长度
*
**/
public class ArrayLengthApp { public static void main(String[] args) {
final int SIZE = 5;
int[] integerArray = new int[SIZE];
float[] floatArray = {5.0f, 3.0f, 2.0f, 1.5f};
String[] weekDays = {"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};
int[][] jaggedArray = {
{5, 4},
{10, 15, 12, 15, 18},
{6, 9, 10},
{12, 5, 8, 11}
};
System.out.println("integerArray length: " + integerArray.length);
System.out.println("floatArray length: " + floatArray.length);
System.out.println("Number of days in a week: " + weekDays.length);
System.out.println("Length of jaggedArray: " + jaggedArray.length);
int row = 0;
for (int[] memberRow : jaggedArray) {
System.out.println("\tArray length for row "
+ ++row + ": " + memberRow.length);
}
}
}
结果输出:
11: 数组复制
import java.util.Arrays;
/**
* 数组复制
*
**/
public class ArrayCopyApp { public static void main(String[] args) {
float[] floatArray = {5.0f, 3.0f, 2.0f, 1.5f};
float[] floatArrayCopy =
floatArray.clone(); //此方法为数组的复制方法:把a数组的所有元算复制到b数组中
System.out.println(Arrays.toString(floatArray) + " - Original");
System.out.println(Arrays.toString(floatArrayCopy) + " - Copy");
System.out.println();
System.out.println("Modifying the second element of the original array");
floatArray[1] = 20;
System.out.println(Arrays.toString(floatArray)
+ " - Original after modification");
System.out.println(Arrays.toString(floatArrayCopy) + " - Copy");
System.out.println();
System.out.println("Modifying the third element of the copy array");
floatArrayCopy[2] = 30;
System.out.println(Arrays.toString(floatArray) + " - Original");
System.out.println(Arrays.toString(floatArrayCopy)
+ " - Copy array after modification");
}
}
执行后输出结果如下:
12:找出数组的类表示
/**
* 找出数组的类表示
*
**/
public class ArrayClassNameApp { public static void main(String[] args) {
final int SIZE = 5;
int[] integerArray = new int[SIZE];
float[] floatArray = {5.0f, 3.0f, 2.0f, 1.5f};
String[] weekDays = {"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};
int[][] jaggedArray = {
{5, 4},
{10, 15, 12, 15, 18},
{6, 9, 10},
{12, 5, 8, 11}
};
Class cls = integerArray.getClass(); System.out.println(
"The class name of integerArray: " +
cls.getName()
);
// arrayName.getClass()
cls = floatArray.getClass(); System.out.println(
"The class name of floatArray: " + cls.getName());
cls = weekDays.getClass(); System.out.println(
"The class name of weekDays: " + cls.getName());
cls = jaggedArray.getClass(); System.out.println(
"The class name of jaggedArray: " + cls.getName());
System.out.println();
cls = cls.getSuperclass(); System.out.println(
"The super class of an array object: "
+ cls.getName());
}
}
第三章:类
1:面向对象概念
1:面向对象编程的特性
1:封装
2:继承
3:动态
2:面向对象编程的好处
2:类
1: 定义类
//定义类的一般形式如下:
Modifiers
可选
class ClassName{
classBody
可选
}
ClassModifieres
可选
class Identifier ClassBody
//class 关键字之前的修饰符用于定义类的可见性 class MyClass{
//attributes
// constructors
//methods }
2: 定义Point 类
/*
*声明Point类
*/ class Point{
int x;
int y; } /* 说明:
* 该类使用关键字class 并紧跟类名Point 定义而成。由于修饰符在类定义时是可以选的,因此并未
* 包含在上述的定义中。修饰符用于定义类的可见性。
* {} 中的内容表示类的主体。
*/
3:使用类
Point p=new Point();
4: 访问/修改字段
5: 类的示例程序
class Point { int x;
int y;
} class TestPoint { public static void main(String[] args) {
System.out.println("Creating a Point object ... ");
Point p = new Point();
System.out.println("Initializing data members ...");
p.x = 4;
p.y = 5;
System.out.println("Printing object");
System.out.println("Point p (" + p.x + ", " + p.y + ")");
}
}
6:方法声明
import java.util.*; class Point { int x;
int y;
double getDistance() { return (Math.sqrt(x * x + y * y)); }
} class TestPoint { public static void main(String[] args) {
System.out.println("Creating a Point object ... ");
Point p1 = new Point();
System.out.println("Initializing object ...");
p1.x = 3;
p1.y = 4;
double distance = p1.getDistance();
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb, Locale.US);
formatter.format("Distance of Point p1(" + p1.x + "," + p1.y
+ ") from origin is %.02f", distance);
System.out.println(sb);
System.out.println();
sb.delete(0, sb.length());
System.out.println("Creating another Point object ... ");
Point p2 = new Point();
System.out.println("Initializing object ...");
p2.x = 8;
p2.y = 9;
distance = p2.getDistance();
formatter.format("Distance of Point p2(" + p2.x + ","
+ p2.y + ") from origin is %.02f", distance);
System.out.println(sb);
}
}
当编译运行时结果如下:
7:对象内存表示
3:信息掩藏
1:展示信息掩藏概念的程序
class Wallet { private float money; public void setMoney(float money) {
this.money = money;
} public boolean pullOutMoney(float amount) {
if (money >= amount) { 12 money -= amount; 13 return true; 14 } 15 return false;
}
} class Person { public static void main(String[] args) {
Wallet wallet = new Wallet();
System.out.println("Putting $500 in the wallet\n");
wallet.setMoney(500);
System.out.println("Pulling out $100 ...");
boolean isMoneyInWallet = wallet.pullOutMoney(100);
if (isMoneyInWallet) {
System.out.println("Got it!");
} else {
System.out.println("Nope, not enough money");
}
System.out.println("\nPulling out $300 ...");
isMoneyInWallet = wallet.pullOutMoney(300);
if (isMoneyInWallet) {
System.out.println("Got it!");
} else {
System.out.println("Nope, not enough money");
}
System.out.println("\nPulling out $200 ...");
isMoneyInWallet = wallet.pullOutMoney(200);
if (isMoneyInWallet) {
System.out.println("Got it!");
} else {
System.out.println("Nope, not enough money");
}
}
}
编译运行结果如下:
4:封装
class Date{ public int day;
public int mount;
public int year; public void setMount(int month){
if(month >=1&& month <=12){
this.month=month;
}else{
System.out.println(month);
} } }
Java7编程高级进阶学习笔记的更多相关文章
- Java7编程 高级进阶学习笔记--嵌套类
定义: 在一个类中定义的类叫做嵌套类. 作用: 1.允许对相关类进行逻辑分组 2.增强了代码的封装性 3.使代码具有更强的可读性和维护性 使用方式: package com.cmz.baseTest; ...
- Java7编程高手进阶读书笔记--final学习
这段时间终于有了一些自己的时间,在网上淘了一本书把java学习下,顺便记下每日的学习心得 工作快两年多了,才知道基础的东西永远看的时候都有一个新的体验,今天中午看了下final,把自己炒的代码贴在这以 ...
- Java7编程高手进阶读书笔记—集合框架
定义:Java集合框架API是用来表示和操作集合的统一框架,它包含接口.实现类.以及帮助程序员完成一些编程的算法 作用: ●编程更加省力,提高城程序速度和代码质量 ● 非关联的API提高互操作性 ● ...
- ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改
ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...
- 《JavaScript DOM 编程艺术》 学习笔记
目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...
- 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战
前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- 《高质量C++&C 编程指南》学习笔记
这本电子书是在国科大上课时候,老师在课件资源里边提供的.之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他.因此,我就格外注意这件事,但 ...
- C#进阶学习笔记(个人整理)
学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...
随机推荐
- 线程优先级.Priority()
线程对象.Priority(),线程优先级1-10,10优先级最高.此功能比较鸡肋,不起作用.了解即可 以下案例:循环输出加减乘除,除优先级最高 //MyThread线程 class MyThread ...
- 按钮JButton,单选按钮JRadioButton,复选框JCheckBox
1.按钮JButton public class Demo extends JFrame { public Demo() { setBounds(100, 100, 400, 200); setDef ...
- 元组&哈希&字典
1.元组(1)特性:不可变(不能修改.添加.删除),可以做切片 元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变(元组里套用列表,列表中的值可变)(2)功能: index count ...
- CodeForces892E 可撤销并查集/最小生成树
http://codeforces.com/problemset/problem/892/E 题意:给出一个 n 个点 m 条边的无向图,每条边有边权,共 Q 次询问,每次给出 ki 条边,问这些边 ...
- VBScript进阶篇一
VBScript进阶篇一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编译型与解释型的区别 其实我们通过一张图就可以大致了解一下,他们运行机制. 想要了解更多,请 ...
- U盘从Fat32快速转换为NTFS
WIN+R ,输入cmd,打开命令框 输入: convert d:/FS:NTFS 注意,你的U盘的盘符是什么就写什么,我的是d盘 例外的来了!!!一般来说,按照我上面的步骤已经没有问题了.但是!!! ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
- HDU - 4389 X mod f(x)(数位dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 为[A,B] 区间内的数能刚好被其位数和整除的数有多少个. 分析 典型的数位dp...比赛时想不出状 ...
- python 小程序,在列表中找到所有指定内容的位置
要求如下图所示:
- 18. Spring Boot 、注册Servlet三大组件Servlet、Filter、Listener
由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件 public class MyServlet extends ...