Fork me on GitHub

Java学习笔记

Java学习记录

预学习

跟着秦疆学Java
学习网站https://www.bilibili.com/video/BV12J41137hu

大纲
JavaSE,数据库,前端,JavaWeb,SSM框架,Unux,SpringBoot,SpringCloud,Hadoop。

预科

  • 如何更好更高效学好Java
    1.多写代码,多写笔记,多写文章
    2.多练多分享。
    3.坚持
  • Dos命令
    1.打开CMD的方法
    (1).开始+系统+命令提示符
    (2).Win键+R 输入cmd打开控制台(推荐使用)
    (3).在任意的文件夹下面,按住shift键 + 鼠标右键点击,在此处打开命令行窗口
    (4).资源管理器的地址栏前面加上cmd路径
    2.常用的Dos命令
#盘符切换 如D:
#查看当前目录下的所有文件 dir
#切换目录 cd change directory 如:cd /d E:\IDE
#返回上一级 cd..
#清屏cls(clear screen)
#退出终端 exit
#查看电脑的ip ipconfig
#打开应用 calc mspaint notepad
#ping 命令 如:ping www.baibu.com
#文件操作 md 目录名(创建) cd 目录名(进入) cd> 文件名(新建文件) del 文件名(删除文件) rd 目录名(移除目录)
  • 语言发展历史
    1.C & C++
    (1)1972年C诞生//贴近硬件,运行极快,效率极高//操作系统,编译器,数据库,网络系统等//指针和内容管理
    (2)1982年C++诞生//面向对象//兼容C//图形领域、游戏等
    2.1995年Java诞生
    Java 2 标准版(J2SE):占领桌面
    Java 2 移动版(J2ME):占领手机
    Java 2 企业版(J2EE):占领服务器
    高可用,高并发,高性能

Java基础

Java环境配置
-->JAVA_HOME,-->path变量
检查java -version,JDK java,环境变量javac

第一个程序HelloWorld可能遇到的问题
1.大小写敏感
2.用命令行执行程序的时候可能中文出现问题,尽量使用英文
3.文件和类名一致,且首字母大写
4.符号使用了中文

标识符

  • 字母(大小写字母,汉字等各种语言中的字符),美元符($),下划线()开始,后面可以是字母,美元符($),下划线()或数字的任何字符组合
  • 不能使用关键字,大小写敏感

数据类型
Java的数据类型

  • 基本数据类型

  • 引用数据类型:类,接口,数组

  • 八大基本数据类型

int num1 = 10; byte num2 = 20; short num3 = 30; long num4 = 30L;
float num5 = 50.1F; double num6 = 3.1415926535; char name = '名'; 
//String namea = "名字";字符串,String不是关键字,类
boolean flag = true;
  • 拓展
    整数:二进制0b,八进制0,十六进制0x;浮点数拓展;
int i = 10; int i2 = 010; int i3 = 0x10;  

   浮点数:最好完全避免使用浮点数进行比较

//float 有限,离散,舍入误差,大约,接近但不等于
//double
//如银行业务,钱,用BigDecimal 数学工具类
float f = 0.1f; double d = 1.0/10;
System.out.println(f == d);//false
float d1 = 2232323232; float d2 = d1 + 1;
System.out.println(d1 == d2);//true 

  字符:所有的字符本质还是数字,Unicode 2字节 0-65536 Excel(2的16次方)使用范围

char a= 'a';
System.out.println(a); System.out.println((int)a);
char c = '\u0061'; System.out.println(c);//转义字符//a

   字符串

String sa = new String("hello world");
String sb = new String("hello world");
String sc = "hello world";
String sd = "hello world";	
System.out.println(sa == sb);//false
System.out.println(sc == sd);//true
  • 类型转换
    低--->高
    byte,short,char->int->long->float->double
    运算中,不同类型转为相同类型再运算(强制(类型名)变量名 高->低,自动 低->高)
    强制转换注意点:
    1.不能对布尔值进行转换
    2.不能把对象类型转换为不相干的类型
    3.在把高容量转为低容量的时候,强制转换
    4.转换的时候可能存在内存溢出或者精度问题
    大数值:JDK7新特性,数字之间可以用下划线分开

  • 变量作用域
    类变量,实例变量,局部变量

public class TextHelloWorld {
	static int allClicks = 0;//类变量(static)
	String str = "hello world";//实例变量(从属于对象:如果不自行初始化,这个类型的默认值为0,0.0,布尔值默认false,除了基本类型,其余的都是null)
	public void method() {
		int i = 0;//局部变量(必须声明和初始化值)
	}
}
\\
public class HelloWorld{
        static double sal = 2500; 
	String name;
	int age;
	public static void main(String[] args) {
		HelloWorld hello = new HelloWorld();
		System.out.println(hello.name+hello.age);
                System.out.println(sal);
	}
}
  • 常量 初始化之后不会改变。
    常量名:一般使用大写字符和下划线,如:MAX_VALUE
    变量命名:驼峰,如:manthSalary
    类名:首字母大写和驼峰GoodMan
    方法名:首字母小写和驼峰,runRun()

final 常量名 = 值;如: (static final)(修饰符,不存在先后顺序) double PI = 3.14;

  • 字符串连接符
int a = 1, b = 2;
System.out.println(""+a+b);//""把后面的a,b转换成字符//12
System.out.println(a+b+"");//2

JAVA结构

输入输出——键盘接收

import java.util.Scanner;
class Test{
  public static void main(String [] args){
  
  //创建一个扫描器对象, 用于接收键盘数据
  Scanner sc = new Scanner(System.in);
  
  if (sc.hasNext()){
  String str = sc.next();
  System.out.println("输出内容:" + str);
  }
  
  //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
  sc.close();
  }
}
  • next(): 1.一定要读取到有效字符后才可以结束输入
    2.对输入有效字符之前遇到的空白, next()方法会自动将其去掉
    3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
    4.next() 不能得到带有空格的字符串
  • nextLine(): 1.以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
  • equals:判断字符串是否相等
  String s = sc.nextLine();
  if (s.equals("Hello"))
    System.out.println("Yes");

2.可以获得空白。
多选择结构
1.switch:变量类型可以是:byte, short, int, char, 从 Java SE 7开始支持String类型。
增强for循环
Java5引入的主要用于数组或集合

for (int x:num)
{
System.out.println(x);
//代码句子
}

方法重载
一个类中,有相同的函数名称,但参数不同
可变参数
1.JDK1.5开始支持传递同类型的可变参数

public static void printMax(double... numbers){}

数组
1.长度确定, 类型相同, 数组是对象, 数组对象本身在堆中。
2.不能越界,ArrayIndexOutofBounds
3.Arrays类,类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用
4.创建数组 dataType[] arrayRefVar = new dataType[arraySize];
5.初始化:
(1)静态初始化
int[] a = {1,2,3};
Man[] mans = {new Man(1,1), new Man(2,2)};
(2)动态初始化
int[] a = new int[2];
a[0]=1;a[1]=2;
(3)数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐试初始化

内存分析
堆:存放new的对象和数组, 可以被所有的线程共享,不会存放别的对象引用
栈:存放基本变量类型(会包含这个基本类型的具体数值), 引用对象的变量(会存放这个引用在堆里面的具体地址)
方法区:可以被所有的线程共享, 包含了所有的class和static变量

java面向对象

构造器

1.和类名相同
2.没有返回值
作用:1.new本质在调用构造器
2.初始化对象的值
注意点:1.定义有参构造之后, 如果想使用无参构造, 显示的定义一个无参的构造

封装、继承、多态

封装
1.程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
2.封装(数据的隐藏): 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问。属性私有,get/set
优点:(1)提高代码的安全性,保护数据
(2)隐藏代码的实现细节
(3)统一接口
(4)系统可维护增加了
继承
1.继承的本质是对某一批类的抽象,从而实现对现实世界更好地建模
2.extends"扩展",子类是父类的扩展
3.Java类只有单继承,没有多继承
4.继承是类和类之间的关系,除此之外,类和类之间的关系还有依赖,组合,聚合等
5.继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父亲,使用extends
super
1.super调用父类的构造方法,必须在构造方法中的第一个
2.super必须只能出现在子类的方法或者构造方法中
3.super和this不能同时调用构造方法
this与super
代表的对象不同:this:本身调用这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件才可以使用
构造方法:this():本类的构造;
super():父类的构造
重写:需要有继承关系,子类重写父类的方法!子类的方法和父类必要一致,方法体不同
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不可以缩小:public > protected > default > private
4.抛出的异常:范围,可以缩小,但不能扩大;
5.重写的原因:父类的功能子类不一定需要,或者不一定满足
6.快捷键 Alt+Fn+Insert 构造方法(over)重写
多态
1.动态编译
2.同一个方法可以根据发送对象的不同而采用多种不同的行为方式
3.一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
能调用的方法都是自己的或者继承父类的,父类可以指向子类,但是不能调用子类独有的方法,
对象能执行哪些方法,主要看对象左边的类型,子类重写父类的方法,执行的是子类的方法
4.多态存在的条件:(1)有继承关系(2)子类重写父类的方法(3)父类引用指向子类的对象
5.注意点:(1)多态是方法的多态,属性没有多态性
(2)父类和子类类型转换异常,classCastException
(3)存在条件:继承关系,方法重写,父类引用指向子类对象 Father f1 = new Son();
(4)static方法属于类,不属于实例,final常量,private方法
6.instanceof 类型转换 引用类型

异常

posted @ 2022-06-06 21:26  ♛pretty♥  阅读(58)  评论(0编辑  收藏  举报
1