寒假学习java笔记

2024-04-26 10:32
文章标签 java 学习 笔记 寒假

本文主要是介绍寒假学习java笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Day1 2020年1月21日

1.一行最好只定义一个变量,定义多个变量要每个都赋初值

2.浮点输入:(声明用Double/Float,利用in.nextDouble()/in.nextFloat()输入)

浮点计算:只要运算符两边有一个浮点就按浮点计算,否则结果保留整数

浮点比较: 判断a==b? 使用 Math.abs(a-b)<1e-6

3.运算符优先级

单目运算符优先级最高,(int)就是单目运算符 ,再如:–、++

关系运算符优先级 < 加减

关系运算

==和!=优先级比其他的低

6>5>4(错了,这样是true>4)

4.if-else

可以If-else if -else级连

最好是单一出口(在级连之中赋值,级连结尾后输出)

常见错误:

(1)忘了大括号(所以每次写if都加一个大括号)

(2)If后面加了分号,变成加了空语句

(3)If(a=b) (X) if的括号里的东西必须是boolen型

Day2

一、逻辑类型

  1. 只有两种值 true 或者false

  2. 类似的声明:Boolean isprime=true;. 或者 Boolean tooHigh;.

  3. 优先级顺序: ! && ||

二、数组

  1. 声明方式①<类型>[]<名字> = new<类型>[元素个数]

  2. 声明:int[] numbers = new int[100];

  3. 元素个数必须给出

  4. 元素个数可以是变量(但是一旦初始化完成后,变量改变,数组元素个数不会改变)

    int num=5;
    int i;
    int[]a=new int[num];
    num=7;
    for (i=0;i<num;i++)
    {a[i]=i;
    }
    

    这样会溢出,因为a的大小初始值是5,num变为7,a的长度不会变。

  5. 数组长度=数组名字.length

  6. 声明方式②:试试 int[] numbers = {1,2,3,4,5};

  7. 数组变量是管理者!(普通的变量是所有者)

    Eg. int[] a = new int[100];int[]b=a;// a==b 是true
    

让b有权限管a所管理的那个数组,所以a,b同时管理 一个数组。

8.深度拷贝(让a,b管理不同区域,但是b的初始内容与a相同)

int[] copy=new int[numbers.length];
for (i=0;i<copy.length;i++)
{copy[i]=numbers[i];
}

for each循环

①(只是取出数组元素,但是不知道它是第几个)

② 浅拷贝 修改k,numbers不会变

③ 格式 for(int k : numbers );

9.二维数组

声明:①int[][]a = new int[行数][列数];

②Int[][]a={

{1,2,3},

{1,2},

};

每行一个{},逗号分隔

最后的逗号可以存在

Day3

一、字符串
  1. char型定义:一个字符;

  2. 包裹类型:

①int --> Integer 有 .MAXVALUE;

②char–>Character 有.isdigit() .isupper()等类方法;

  1. Math类

①abs 绝对值 ③random 随机数

②round 四舍五入 ④pow 幂运算

  1. 字符串

(1)String是一个类,String变量是对象的管理者,而非所有者

(2) 创建: String s = new String(“a string“);

(3) 创建: String s = “hello”;

(4) 运算: “+”: 从左到右, 拼接

(5) 输入: in.next() :读入一个单词 in,nextLine():读入一行

(6) 判断字符串变量 是否 具有相同的内容: a.equals(b);

(7) 判断字符串变量 是否 指向同一个区域: a==b

(8) S1.compareTo(S2) 类似于c语言strcmp(S1,S2);

(9) S.length() 获得S的长度

(10) S.charAt(index) 获得[0.lemth-1]范围内的index位置的字符

(11)S.substring() 取子串 ;

① S.substring(begin,end) 取 [begin,end) 范围的字符串

② S.substring(index) index 位置往后的字符串;

(12)s.indexOf()

① S.indexOf( c ) 若 c不存在,返回-1

② 若存在,返回第一个c出现的位置

③ S.indexOf( c ,n)从n 位置开始往右边找c,可以包括n 位置上的c

④ S.indexOf( subs) 可以找子串

⑤ S.lastIndexOf© 从右边往左边开始找c

(13)其他

① S.trim()删除字符串的头尾空白符。

② S.replace(c1,c2) 把s中所有的c1换成c2

③ S.toLowerCase

(14) 字符串是不可变类型,S.toLowerCase不会改变S本身,而是制造了一个新的字符串

(15) Switch-case可以使用字符串作为分支入口

二、函数
  1. 方法=函数(一样的称谓)

  2. 变量的定义

(1) 本地变量是定义在函数的块内(大括号)的

(2) 也可以定义在语句的块内,甚至可以随便拉一对大括号,在其中定义变量

(3) 不能在一个块内定义同名的变量,也不可以定义块外面定义过的变量

(4) 程序运行进入到这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了

Day4

一、对象

1.构造函数

(1) 构造函数没有返回类型

(2) 重载:一个类可以有多个构造函数,根据参数自动调用

2.Private

(1) 只有 成员变量 和 成员方法 可以被private修饰

(2) Private变量只可以被 类的成员函数访问

public void changeTo(Display d) {this.value = d.value;
}

(3) 例子如 ↑   在Display类内部定义的changeTo方法,可以直接访问d的私有成员变量value,因为d也是Display类的对象。

3.Public

(1) 所有不带public 、 private 和 protected 的成员 被称为“friendly”,可以被同一个包下的其他类 访问。

(2) 如果想要被其他包的成员访问,就用public修饰一下。

(3) 一个编译单元(.java文件)只能有一个public类

4.Static

(1) 类变量,一改,全改。 且可以直接访问  类.变量(eg, Display.step)

(2) 类函数, 表示次函数不属于任何对象,属于类

(3) Static修饰的东西,既可以被类访问,也可以被对象访问。

5.ArrayList

(1) ArrayList声明时候,说ArrayList a= new ArrayList()这样.

(2) notes.toArray(a) 可以数组a 自动填满

(3) Notes.size .add .get ,remove   四件套

6.对象数组的 每个元素都是对象的管理者 而非对象的所有者,例如String[] a=new String[10] 只是制造了10个空的管理者。一般要接着通过for循环创建初始值(调用对象的构造方法)。

Eg,

for(i=0;i<10;i++){a[i]= new String(“”+i);
}

7.HashSet

(1) HashSet声明时候,说Hashset h= new Hashset()这样.

(2) hashset里没有重复元素

(3) Hashset和 ArrayList都可以直接println

8.只要在类里面写了 Public String toString(){ return “”+ i(i是成员变量); } 输出的时候,直接println(对象)就会把成员变量输出为可以读的字符,格式由toString决定。

9.HashMap

(1) HashMap声明时候,说 HashMap<K,V> h = new HashMap<K,V>()这样的键值对(K,V都必须是对象类型,例如Integer,String不可以是int).

(2) .containsKey(k) :返回true,含有k

(3) .put(k,v):加入键值对,同一个k放多次v,只保留最后一次,因为键值对是一一对应的。

(4) .keySet() 通过.keySet().size()可以知道HashMap里有多少个key

(5) .get(k) 返回k对应的v

  1. StringBuffer

(1) Append

(2) ToString

二、继承

1.可以利用构造器工具,直接写出构造方法(Alt+Insert)

2.父类的private变量只有父类自己可以用

3.父类的protected变量可以由 同一个包里的其他类 以及 不同包里的子类 使用。(尽量不要把父类做成protected,最好用private)

4.Super(pramater) 可以根据参数调用父类的构造器。 super.f()调用父类的方法

5.子类在构造时,会先保证父类的成员变量被合适地初始化

6.子类里如果有与父类当中同名的变量(下称child和father指代子类的同名变量和父类的同名变量),则子类的方法调用的是child,父类的方法调用的是father.

7.造型 vs 类型转换

(1) 造型 是把类A当做类B来使用(类A本身的属性不会改变,只是别人看它的方式变化了)

(2) 类型转换 只适用于基本类型,如 (int)、(double)这样的强制类型转换,会改变属性

(3) 所以,子类的对象可以直接赋给父类的变量,父类的对象不可以直接赋给子类的变量

(4) Eg .

Velchicle v;Car c = new Car();= c ;  //可以c = v ; //编译错误 

(5) 父类要赋给子类,需要用造型: c = (Car) v;

(但是只有当v这个变量实际管理的是Car才行,这个(Car)造型 只是给编译器看的)

(6) Java里面所有函数都是动态绑定,编译器会自己找到对象对应的函数

(7) Override: 子类的函数会覆盖父类的同名函数

(8) 高内聚,低耦合

① 类和类之间的关系叫做耦合,耦合越低越好

② 用封装来降低耦合:把成员变量都搞成private

③ 用容器来实现 可扩展性:HashMap<String,Room> 替代 成员变量表示方向(尽可能减少硬编码)

④ 用 框架+数据 提高可扩展性:

  1. 看看命令的解析是否可以脱离if-else

  2. 定义一个Handler来处理命令

  3. 用Hash表来保存命令和Handler之间的关系

三、抽象

1.抽象函数(有abstract修饰符):表达概念而不能实现具体代码的函数

2.抽象类:表达概念而不能构造出实体的类

3.抽象函数的类一定是抽象类

4.抽象类不能制造对象,但可以定义变量,非抽象子类的对象可以交付给这个变量

Day5

1.接口

(1) 声明接口 用 public interface cell (它与class是同级的 )

(2) 实现接口 用 implements cell (它与extends是同级的)

(3) 接口的所有成员函数都是抽象函数,所有成员变量都是public static final|

(4) Eg.

interface A {// 定义了接口public static final String MSG = "Hello";// 全局常量
// 抽象方法public abstract void print();}

2.内部类

(1) 放在某个类内部,被当做内部成员,可以访问其他成员变量,调用其他成员函数

(2) 放在某个函数内部,可以访问函数所在类的其他成员变量,调用其他成员函数,可以访问所在函数的final本地变量

3.匿名类

(1) 内部类的一种

(2) 在new 对象时,给出的类的定义形成了匿名类

(3) 匿名类可以继承某类,也可以implements

(4) Swing在new Listener时,会常常用到匿名类(减少取名字的麻烦)

4.MVC设计:View 和 Control 分离, 用户点击由Control部分代码修改数据,View只管拿到数据,repaint()

Day6

一、异常

1.祖传句式

(1) try{ } catch(…Exception e ){ }catch(…Exception e ){ }catch(…Exception e ){ }(应对多种不同type的异常)

2.异常捕捉机制

(1)有异常 --> 先看所处的代码块是否是try, 是则看是否和catch匹配。否则看所处的函数的调用处是否是try…(翁老师给了一张流程图(>V<))

(2)e.printStackTrace()可以查看异常源头函数的调用关系

(3)捕捉了异常,则不会打印e,如果还想看看这个e,可以在catch{}里写一个throw e;

3.定义异常

(1)祖传句式

①Class OpenException extends Throwable{}

②Public class f()throws OpenException{}

4.当 异常声明 遇上 继承关系

(1)当覆盖一个函数的时候,子类不能声明抛出比父类的版本更多的异常

(2)在子类的构造函数中,必须声明父类可能抛出的全部异常

这篇关于寒假学习java笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/937346

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B