CoreJava学习笔记01 基础

CoreJava


学习方法

费曼学习法

  1. 确定目标 (目标要足够明确)有什么样的目标
  2. 模拟教学 (课堂反转,转教他人,90%的知识吸收率)
  3. 重复回顾 代码量 笔记(用自己的话把听懂的知识记下来)
  4. 概念简化

  1. 思维习惯 行为习惯
  2. 学习能力 (学会学习是最高级技能)

培训最终目的 建立一个完整的知识体系
互联网精神 (分享)
人类有史以来最卓越的编程语言 ----比尔盖茨
知其然,知其所以然。


Java

编程语言 人机对话 语法
机器语言 -------------> 自然语言

低级语言 汇编语言
中级语言 C
高级语言 C++

java发展历程

1995年(Sun)Java

  • 95.5.23 JDK1.0 96年推出的
  • 98.12 JDK1.2 java2 J2SE J2ME J2EE
  • 2001 TIOBE NO.1
  • 2004 JDK1.5 JDK5 Java JavaSE JavaME JavaEE
  • 2014 JDK1.8 JDK8

Java的主要特点

跨平台 Java应用可以部署在不同的操作系统上
简单
面向对象
开放 开源
积累了大量的技术资源
强者恒强

计算机语言的运行机制

  1. 编译 源代码 ------------> 机器码 (编译器一次性把源代码翻译为机器码)运行效率高 无法跨平台 (C、C++)
  2. 解释 源代码 ------------> (解释器逐行译为机器码,并运行) 运行效率低 可以跨平台 (脚本语言)

Java的运行机制

先编译 后解释
源文件(.java)-----编译器-----> 字节码(.class)-----解释运行----->逐行运行

运行效率高 可以跨平台

虚拟机 屏蔽底层不同操作系统的差异,实现跨平台

字节
1B -128–127
2B -32768–32767
4B -2147483648–2147483647
8B -9223372036854775808–9223372036854775807

.class
解释器
JVM
操作系统

编译器+JVM+解释器+工具+类库=JDK

Hello.java

class A{
public static void main(String[] args){
	System.out.println("HelloWorld");
   }
}

  
编译 : javac Hello.java 
运行 : java A

配置三个环境变量

  1. JAVA_HOME JDK安装目录 告诉别人我的电脑上装有JDK,装在哪里
  2. PATH JDK安装目录/bin 允许可以到其他目录下运行
  3. CLASS_PATH =. 提示编译器JVM到哪里去找所需要的字节码文件

class(类)

Java组织代码的基本单位,每个类编译之后对应生成一个字节码文件

公开类所在的源文件的文件名必须和公开类名相同
主函数:Java代码的入口函数。执行一个类,只会执行这个类的主函数

public static void main(String[]args){}

一个源文件中可以定义多个类,但是只能定义一个公开类

java HelloWorld
java: 启动虚拟机  寻找HelloWorld.class

###package(包)
利用目录结构管理多个类

运用

java 包名.类名
javac -d . 源文件文件名

###import(导入包)
声明所用的类属于那个包,以便在程序中使用短类名

import java.util.*;  //表示所有类,不包括子包

如果有类名冲突,import无效
每个Java源程序默认添加 import java.lang.*;
java顶级结构
package 0-1个
import 0-n个
class 1-n个 公开类 0-1个

Java编程习惯

1. 缩进

目的 提升代码的可读性
习惯

  1. 每行只写一条语句
  2. 同级代码左对齐
  3. 每进入一个代码块 缩进一次
2. 注释

目的 为文件添加文件说明
习惯
1. //单行注释
2. /* /多行注释
3. /
* */多行注释 可以配合JavaDoc工具使用
编程习惯 保证一定量的注释 ,做到代码注释到1:1
学习习惯

  1. 为老师的代码加上注释
  2. 删除老师的代码,根据注释还原代码
  3. 整体删除,重写老师代码
3. 标识符命名
  1. 由字母、数字、下划线、货币符号组成,其中数字不能开头
  2. 大小敏感,没有长度限制
  3. 不能使用Java中的关键字、保留字(goto、const)、特殊单词(true、false、null)

关键字
abstract assert do implements private throw boolean double import
protected throws break else enum instanceof public transient byte
extends int return case true false interfaceshort try catch final long
static void char finally native super volatile class float new switch
while continue for null synchronized default if package this


习惯

  1. 望文知义
  2. 大小写规则
程序元素大小写规则示例
单词首字母大写HelloWorld
全小写helloworld
变量 / 方法首单词全小写, 随后的单词首字母大写helloWorld
常量全大写HELLOWORLD

变量和数据类型

强类型: 变量类型和数据类型保持一致
定义变量: 变量类型 变量名
为变量赋值: 变量名=数据
访问变量: 直接用变量名访问

int a;
a=10;
System.out.println(a);//a=10
a=20;
System.out.println(a);//a=20
---------------------------------------
int a=10,b,c=20
数据类型
一、基本数据类型(原始类型、简单类型)

整形
1.byte 1Byte -128 – 127
2.short 2Byte -32768 – 32767
3.int 4Byte -2147483648 – 2147483647
4.long 8Byte -9223372036854775808 – 9223372036854775807 字面值加l或者L

int a = 10;
int a = 012;   //0开头,默认为8进制
int a = 0xA;   //0x开头,默认为16进制
int a = ab1010;//0b开头,默认为2进制  since7.0
long a = 12345678L;

00000000 0

01111111 127

10000000 -128

11111111 -1

浮点型
精度 精确到小数点后多少位
5.float 4Byte 单精度 字面值 加f或F
6.double 8Byte 双精度 字面值 加d或D或不加
科学计数法 1.3*10^3 1.3e3

float 1符号位 8指数位 23尾数位
double 1符号位 11符号位 52尾数位

7.char 2Byte 字符 字面值’A’ ‘\uoo41’
字符的编码 每一个字符对应一个整数 和整数类型可以交换使用

char c = '\u0041';
char c = 'A';
char c = 65;

A 65 a 97 0 48
ASCII 针对英语字符
国际化的字符集
Unicode 全球统一编码方式
UTF-16 以16位作为一个字符编码

转义字符

'\n' 换行
'\t' 水平跳格
'\'' 单引号
'\"' 双引号
'\\' 反斜杠

8.boolean 布尔类型 字面值 true false
#####对象类型
String 字符串 “” 双引号

"a"+"b"="ab"
'a'+'b'=195
数据类型转换和提升

数据类型提升: 低字长整数赋值给高字长整形 整数赋值给浮点数 float赋值给double
数据类型强转: 高字长整数赋值给低字长整数 浮点数赋值给整数 double赋值给float short和char的相互赋值
boolean 类型不能参与任何不同类型的赋值和强转
基本类型和对象类型之间也不能发生赋值和强转

表达式与运算符

表达式

通过运算符,连接变量、常量和字面值,所形成的具有特定数值的运算符

表达式的数据类型(a+b)
  • 如果a,b有String -------->String
  • 否则如果a,b有double -------->double
  • 否则如果a,b有float -------->float
  • 否则如果a,b有long -------->long
  • 否则 ---------------------------->int

#####运算符

  1. 数学运算符 + - * / %,整数除整数,结果还是整数

  2. 赋值运算符 = a=b 赋值表达式的值为b的值

     += -= *= /=  %=   (不会类型提升)a+=b<==>a=a+b(会发生类型提升)
     ++  --   a++<===>a+=1  a-- <===> a-=1
     a=4     a++表达式的值是4  ++a表达式的值是5
    
  3. 位运算符 &按位与 |按位或 ^按位异或 ~按位求反
    >> >>> <<

     	1011		1011		1011
     	1110		1110		1110
     与  1010  或	1111 异或    0101
    

a ^ b = c 加密
c ^ b = a ^ b ^ b = bba= 0^a = a 解密

两个变量a b 交换值

  1. c = a ; a = b; b=c;

  2. a = a^b; b=a^b; a=a^b;
    ​ a2 = a ^ b
    ​ b2 = a2^b =abb = bba = 0^a =a
    ​ a3 = a2^b2 = aba = aab = 0^b = b

​ 3) a=a+b; b=a-b; a =a-b;
​ a2=a+b
​ b2 = a2-b = a
​ a3 = a2-b2=a+b-a = b

  1. 比较运算符

    == 等于 a==b

    != 不等于 a!=b

    > < >= <=

  2. 逻辑运算符

    && 逻辑与 并且 (a>b) && (c<d)

    || 逻辑或 或者 (a>b) || (c<d)

    ! 逻辑非 !(a>b)

|| &&是短路运算符
| &是非短路运算符

  1. 三元运算符

    (布尔表达式) ? 表达式1 : 表达式2 (a>b) ? 2 : 3

优先级

括号的优先级最高

java的流程控制

顺序执行 按顺序执行每条语句
条件分支
if(布尔表达式){代码块}

if(布尔表达式){代码块}
else{代码块}

if(布尔表达式){代码块}
else if(布尔表达式){代码块}
···
else{代码块}
switch(int 类型表达式){    // byte short int char
	case1: 代码块1 breakcase2: 代码块2 break...
	default}
switch(String) since JDK7

#####循环流程

while(布尔表达式){
代码块
}
循环0-n次


do{
代码块
}while(布尔表达式);

循环1-n次


for(循环变量初始化;循环条件;循环变量步进){
代码块
}
循环0-n次


for(int i = 1;i <= n; i++){}  循环n次
for(int i = 0;i < n; i++ ){}  循环n次

while 、do while不确定循环 无法预计的循环次数
for 确定循环 可以预计的循环次数

break 跳出循环
continue 跳出本次循环

abc :for(;;){}
给循环起名字abc
break abc  跳出确定的循环

局部变量

定义在方法/函数 内部的变量

  1. 先赋值, 再使用. 系统不会为局部变量提供默认值
  2. 局部变量的作用范围: 从定义开始 , 到所在的代码块结束
  3. 在重合作用范围内, 不允许两个同名的局部变量同时出现

函数

实现了特定的功能的独立的代码过程

冗余代码,降低程序的可维护性

函数的语法
  1. 函数声明

    必须在类以内, 任何函数以外

    public static 返回值类型 函数名 (形式参数列表)

    形式参数: 约定调用该函数,所需要的参数类型和参数顺序 . 形参就是在函数内部有效的局部变量

  2. 函数实现

    代码块 , 将函数中的所有代码编写在代码块中

    return : 函数返回

  3. 函数调用

    函数名(实际参数列表)

    调用一个函数时, 程序流程会离开当前函数, 进入到目标函数 ; 从目标函数返回时, 返回到函数的调用点

    实际参数: 调用函数时, 为形参赋值的数据

[外链图片转存失败(img-osHTV8Fx-1564309294584)(C:\Users\JIAOSH~1\AppData\Local\Temp\1563694777305.png)]

函数的作用
  1. 提高程序的可维护性, 减少冗余代码
  2. 提高程序的可重用性,

编程语言的基本单元:

  1. 语句 汇编语言 CV复用
  2. 函数 C语言 结构化编程 函数库复用
  3. 类 Java语言 面向对象编程 类库复用, 接口复用

函数递归: 函数调用自身

把整体问题划分为若干局部问题, 局部问题的解法与整体问题 同构

[外链图片转存失败(img-ZI1Z6RYS-1564309294585)(C:\Users\JIAOSH~1\AppData\Local\Temp\1563768107260.png)]

数组

数组的语法

一次性定义多个相同类型的变量

  1. 定义数组: 数据类型[] 数组名 int[] a ; int []a; int a[];
  2. 为数组分配空间 , 指定数组的长度: 数组名= new 数据类型[长度] a = new int[5];
  3. 访问数组元素: 数组名[下标] a[0] a[1] a[2] a[3] a[4] 下标范围: 0 - 数组长度-1
  4. 数组长度: 数组名.length a.length == 5
		int[] a ; 
		a = new int[5];
		//int[] a =new int[5];
		
		//遍历   访问数组中的每一个元素
		for(int i = 0 ; i < a.length ; i++){
			System.out.println(a[i]);
		}
  1. 数组元素, 在分配空间的时候, 自动被赋予默认值

    根据数组类型 数值类型为0 , 布尔类型为false , 对象类型为null

  2. 显式初始化

		int[] a ; 
		a = new int[]{2,3,5,8,6};
		// a = new int[5]{2,3,5,8,6};  error!
		// a = {2,3,5,8,6};  error!
		
		int[] b = new int[]{2,3,5,8,6};
		int[] c = {2,3,5,8,6};
数组的存储方式

数组元素在内存中的存储单元是连续的

好处: 便于查询 , 查询效率高 下标从0开始, 也是为了提高寻址查询效率

坏处: 长度固定 , 插入删除效率低

数组的扩容:

二维数组
		//int[][] a = new int[3][4];
		//int[][] a = { {1,2,3,4},{5,6,7,8},{9,6,4,1} }; 
		
		int[][] a = new int[3][];
		a[0] = new int[4];
		a[1] = new int[5];
		a[2] = new int[3];
		
		//遍历a数组
		for(int i = 0 ; i < a.length ; i++){
			// 遍历a[i]数组
			for(int j = 0 ; j < a[i].length ; j++){
				System.out.print("a["+i+"]["+j+"]="+a[i][j]+"\t");
			}
			System.out.println();
		}

[外链图片转存失败(img-p2qAmSk7-1564309294586)(C:\Users\JIAOSH~1\AppData\Local\Temp\1563783335926.png)]

排序算法

冒泡排序 : 相邻的元素进行比较, 每次找出最大的元素

		for(int i = 0 ; i < a.length-1 ; i++){
			for(int j = 0 ; j < a.length-1-i ; j++){
				if (a[j] > a[j+1]){
					int t = a[j];
					a[j] = a[j+1];
					a[j+1] = t;
				}
			}
		}

选择排序: 一个元素与剩余所有元素比较, 每次找出最小的元素

		for(int i = 0 ; i < a.length-1 ; i++){
			for(int j = i+1 ; j < a.length ; j++){
				if (a[i] > a[j]) {
					int t = a[i] ;
					a[i] = a[j] ;
					a[j] = t;
				}
			}
		}


corejava学习笔记02 面向对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java的优势? 1:跨平台(平台:指的是操作系统) 常见的操作系统:Windows Unix Linux Solaris(Sun) 跨平台:用java开发出来的应用程序不受底层操作系统的限制 底层的功臣:JVM = java虚拟机 = 1 + 2 + 3 = 秘书 + 保镖 + 翻译 = 秘书 = 类加载器 = ClassLoader = 保镖 = 字节码校验器 = ByteCode Verifier = 翻译 = 解释执行器 = Interfreter 2:安全 健壮 电力 电信 银行 都会有限考虑使用java实现 3:免费 开源 4:简单 语法简单:c++-- (取其精华 去其糟粕) 糟粕:手动垃圾回收 运算符重载 指针 思想简单:面向对象的思想 = OO思想 面向过程:需要人站在计算机的角度去思考问题 面向对象:需要人拿着代码模拟实现生活 类:一组类型相同事物高度抽象之后的集合概念 创建对象的模板 -》 class 对象:类的一个具体的实例 例子: 人和范冰冰之间的关系? 类和对象 HelloKitty和猫之间的关系? 对象和类 引用:对象的名字 *:一个对象同时可以有多个名字 但是不能一个 名字都没有 如果一个对象一个名字都没有的话 会被gc回收掉 -》 零引用内存回收 属性:对象有什么 方法:对象会什么 5: 动态更新 对于Sun公司官方提供的一些核心方法 值保留一个指向的关系 当若干年后核心类库升级了 我们的程序还是可以正常执行 这是挤兑c/c++的 搭建开发环境: 1:安装jdk http://www.oracle.com SDK = software developmenet kits = 软件开发工具包 JDK = java + SDK = java软件开发工具包 jdk1.5.0 jdk1.6.0 jdk1.7.0 jdk5.0 jdk6.0 jdk7.0 Tiger Mustang Dolphin 老虎 野马 海豚 路虎 悍马 .... JRE = java runtime environment = java运行环境 组成关系: JVM = 类加载器 + 字节码校验器 + 解释执行器 JRE = JVM + API(应用程序变成接口); JDK = JRE + BIN(常用的工具命令) 面试题: JDK和JRE之间的区别? 1:分别表示的含义不同 jdk:java软件开发工具包 jre:java运行环境 2:作用不同 jdk:当一个电脑上面安装jdk之后 会自动的安装jre 所以既可以编写程序 又可以运行程序 jre:当一个电脑上面安装jre之后 只能运行java代码 2:设置环境变量 (环境变量可以不设置 为了简化开发流程 提高开发效率) 给谁使用 作用 PATH: 操作系统 让操作系统更加快捷的找到一个文件/命令 PATH=C:\Program Files\Java\jdk1.6.0_45\bin(javac.exe->编译指令 java.exe -》运行指令) CLASSPATH:类加载器使用 让类加载器明确去哪里加载.class文件 通常不需要设置 默认值:. .:当前目录(.java) CLASSPATH相当于中国的低保制度 JAVA_HOME:其他的程序使用 WEB 设置方式: 1:一次性的设置 (cmd里面设置) set PATH=C:\Program Files\Java\jdk1.6.0_45\bin set PATH = [错误的 等号两边不能加空格] set PATH [找到所有以PATH开头的环境变量的值] set [找到所有的环境变量的值] //set PATH=C:\Program Files\Java\jdk1.6.0_45\bin set CLASSPATH=. set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45 set PATH=%JAVA_HOME%\bin *:%%表示取中间环境变量的值 *:环境变量的名字尽量大写 *:当我们需要给一个环境变量设置多个值的时候 中间需要用;隔开 2:一劳永逸的设置 我的电脑 -》 属性 -》 高级 -》 环境变量 -》 新建 面试题: 1:在设置环境变量的时候 最少需要设置几个环境变量? 0个 2:在设置环境变量的时候 通常需要设置几个环境变量? 1个 -》 PATH -> jdk/bin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值