《Java核心技术卷1》

article/2025/5/12 8:28:14

第3章 Java的基础程序设计结构

整型

在这里插入图片描述
在这里插入图片描述
用int类型表示一百万可以这么写(since 1.7)

int a = 1_000_000;
System.out.println(a);//1000000

可用0b或0B表示二进制(同样since 1.7)

byte a = 0b0000_0010;
System.out.println(a);//2

如出现:

byte a = (byte) 200;
System.out.println(a);//-56

因200超出byte最大整数范围[-128,127],所以将200的二进制截取后8位(这个是编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位。),出现结果;

浮点型

在这里插入图片描述
在这里插入图片描述

自动(隐性)类型转换

在这里插入图片描述

运算优先级

在这里插入图片描述
在这里插入图片描述

String

检测两个字符串是否相等,且不区分大小写

System.out.println("HELLO".equalsIgnoreCase("hello"));//true

输入输出

三种获取键盘输入方法:

		//方式1:使用Scanner类(还是这个简单好用)Scanner in = new Scanner(System.in);System.out.println("输入你的名字");String name = in.nextLine();System.out.println("输入你的年龄");int age = in.nextInt();System.out.println("输入你的工资");float salary = in.nextFloat();System.out.println(name + " " + age + " " + salary);//方式2:直接接收System.out.println("Enter : ");byte[] bytes = new byte[1024];int len = System.in.read(bytes);System.out.println("Result : " + new String(bytes,0,len));//方法3:in流 ->包装流 -> 字符流BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("Enter : ");String str = br.readLine();System.out.println("Result : " + str);if (br != null){br.close();}

格式化输出

System.out.printf("%7.2f",222.333);// 222.33

共输出7个字符,1个空格 + 3个2 + 1个. + 2个3

System.out.printf("%tT",new Date());//00:32:49

格式化输出时间:
在这里插入图片描述
在这里插入图片描述

循环

在这里插入图片描述
可以说for循环是while循环的一种简写方式

switch循环中case
在这里插入图片描述
以及Character, Byte, Short, Integer

多维数组

//自动遍历多维数组
int[][][] a = new int[][][]{{{1,2},{3,4}},{{4,5},{6,7}},};
System.out.println(Arrays.deepToString(a));//[[[1, 2], [3, 4]], [[4, 5], [6, 7]]]

所谓"多维数组"就是数组里的元素在引用其他数组
在这里插入图片描述

第4章 对象与类

静态方法

可以通过实例对象调用静态方法,但不推荐,因为容易造成混淆;一律用类名调用

Java中参数总是按值传递的,使用情况如下

在这里插入图片描述

构造器:

编写类时应当提供一个默认的构造器(不带参数的构造器),保证所有域被赋予默认值
数值类型数据设置为0;布尔类型数据设置为false;String等对象类型将设置为null

在构造器中调用this(即另一个构造器时),应当放在第一句,这样对于公共的构造器代码部分只需编写一次

类设计技巧

  1. 一定要保证数据私有
  2. 一定要对数据初始化
  3. 不要在类中使用过多的基本类型
  4. 不是所有的域都需要独立的域访问器和域更改器
  5. 将职责过多的类进行分解
  6. 类名和方法尽量体现它们的职责
  7. 优先使用不可变的类

第5章 继承

在这里插入图片描述
在这里插入图片描述
测试代码如下:

Parent类

public class Parent {@Overridepublic String toString() {return "Parent{}";}
}

Child类

public class Child extends Parent{@Overridepublic String toString() {return "Child{}";}
}

Employee类

public class Employee {public Parent getParent(){return new Parent();}
}

Manager类

public class Manager extends Employee{@Overridepublic Child getParent() {return new Child();}
}

测试

    public static void main(String[] args) {Manager manager = new Manager();Employee employee = new Employee();System.out.println(manager.getParent());//Child{}System.out.println(employee.getParent());//Parent{}}

得出结论:允许子类将覆盖方法的返回类型定义为父类被覆盖方法原返回类型的子类!!!重写方法的返回类型并不是一定不能修改

equals方法规范

在这里插入图片描述

注意点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下图重写equals方法

重写equals、hashCode、toString(雇员经理例子)

Employee类

package com.cxf.EqualsHashCodeDemo;import java.time.LocalDate;
import java.util.Objects;public class Employee {private String name;private double salsry;private LocalDate hireDay;public Employee(String name,double salsry,int year,int month,int day){this.name = name;this.salsry = salsry;hireDay = LocalDate.of(year,month,day);}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalsry() {return salsry;}public void setSalsry(double salsry) {this.salsry = salsry;}public LocalDate getHireDay() {return hireDay;}public void setHireDay(LocalDate hireDay) {this.hireDay = hireDay;}public void raiseSalary(double byPercent){double raise = salsry * byPercent / 100;salsry += raise;}@Overridepublic boolean equals(Object otherObject) {if (this == otherObject) return true;if (otherObject == null || getClass() != otherObject.getClass()) return false;Employee other = (Employee) otherObject;return Objects.equals(name,other.name) && salsry == other.salsry&& Objects.equals(hireDay,other.hireDay);}@Overridepublic int hashCode() {return Objects.hash(name, salsry, hireDay);}@Overridepublic String toString() {return getClass().getName() + "Employee{" +"name='" + name + '\'' +", salsry=" + salsry +", hireDay=" + hireDay +'}';}
}

Manager类

package com.cxf.EqualsHashCodeDemo;public class Manager extends Employee {private double bonus;public Manager(String name, double salsry, int year, int month, int day) {super(name, salsry, year, month, day);bonus = 0;}public double getSalary() {double baseSalary = super.getSalsry();return baseSalary + bonus;}public void setBonus(double bonus){this.bonus = bonus;}@Overridepublic boolean equals(Object otherObject){if (!super.equals(otherObject)) return false;Manager other = (Manager) otherObject;return bonus == other.bonus;}@Overridepublic int hashCode() {return super.hashCode() + 17 * new Double(bonus).hashCode();}@Overridepublic String toString(){return super.toString() + "[bonus=" + bonus + "]";}
}

测试

package com.cxf.EqualsHashCodeDemo;public class EqualsTest {public static void main(String[] args) {Employee emp1 = new Employee("Lucy",75000,1987,12,15);Employee emp2 = emp1;Employee emp3 = new Employee("Lucy",75000,1987,12,15);Employee bob = new Employee("Bob",50000,1989,10,1);System.out.println("emp1 == emp2: " + (emp1 == emp2));System.out.println("emp1 == emp3: " + (emp1 == emp3));System.out.println("emp1.equals(emp3): " + (emp1.equals(emp3)));System.out.println("emp1.equals(bob): " + (emp1.equals(bob)));System.out.println("bob.toString(): " + bob.toString());Manager man1 = new Manager("Tom",80000,1987,12,15);Manager boss = new Manager("Tom",80000,1987,12,15);boss.setBonus(5000);System.out.println("============================================================");System.out.println("boss.toString(): " + boss);System.out.println("man1.equals(boss): " + man1.equals(boss));System.out.println("emp1.hashCode(): " + emp1.hashCode());System.out.println("emp3.hashCode(): " + emp3.hashCode());System.out.println("bob.hashCode(): " + bob.hashCode());System.out.println("man1.hashCode(): " + man1.hashCode());}
}

利用反射分析类的能力

package com.cxf.reflectionDemo;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;/*** 用于打印一个类的全部信息* @author chen* @version 1.1 2019.9.27*/
public class ReflectionTest {public static void main(String[] args) {//键入全限定类名String name;Scanner in = new Scanner(System.in);System.out.println("Enter class name:(eg : java.util.Date)");name = in.next();try {Class c1 = Class.forName(name);Class superc1 = c1.getSuperclass();String modifiers = Modifier.toString(c1.getModifiers());if (modifiers.length() > 0) System.out.print(modifiers + " ");System.out.print("class" + " " + name);if (superc1 != null && superc1 != Object.class) System.out.print(" " + "extends" + " " + superc1.getName());System.out.print("\n{\n");printConstructors(c1);System.out.println();printMethods(c1);System.out.println();printFields(c1);System.out.println("}");} catch (ClassNotFoundException e) {e.printStackTrace();}System.exit(0);}/*** 打印一个类的全部构造方法* @param c1 一个类*/private static void printConstructors(Class c1) {Constructor[] constructors = c1.getDeclaredConstructors();for (Constructor c : constructors) {String name = c.getName();System.out.print("  ");String modifiers = Modifier.toString(c.getModifiers());if (modifiers.length() > 0) System.out.print(modifiers + " ");//修饰名System.out.print(name + "(");//方法名//参数类型Class[] paramTypes = c.getParameterTypes();for (int j = 0; j < paramTypes.length; j++) {if (j > 0) System.out.print(",");System.out.print(paramTypes[j].getName());}System.out.print(")");System.out.println();}}/*** 打印一个类的全部方法* @param c1 一个类*/private static void printMethods(Class c1) {Method[] declaredMethods = c1.getDeclaredMethods();for (Method m : declaredMethods) {Class returnType = m.getReturnType();String name = m.getName();System.out.print("  ");String modifiers = Modifier.toString(m.getModifiers());if (modifiers.length() > 0) System.out.print(modifiers + " ");//修饰名System.out.print(returnType.getName() + " " + name + "(");//返回类型,方法名//参数类型Class[] parameterTypes = m.getParameterTypes();for (int j = 0; j < parameterTypes.length; j++) {if (j > 0) System.out.print(",");System.out.print(parameterTypes[j].getName());}System.out.print(")");System.out.println();}}/*** 打印一个类的所有属性* @param c1 一个类*/private static void printFields(Class c1) {Field[] fields = c1.getFields();for (Field f : fields) {Class type = f.getType();String name = f.getName();System.out.print("  ");String modidfier = Modifier.toString(f.getModifiers());if (modidfier.length() > 0) System.out.print(modidfier + " ");System.out.print(type.getName() + " " + name + ";");System.out.println();}}
}

第6章 接口、lambda表达式和内部类

对接口提供泛型,尽量杜绝“强转”

在这里插入图片描述

第7章 异常、断言和日志

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/kiVKGLXS.shtml

相关文章

vue class style 三元运算

<span :style"{color: true ? red : }">test1</span> <span :class"{show: true,hide: false}">test2</span>

Vue 实现拖拽模块(一)拖拽添加组件

本文主要介绍了vue拖拽组件实现构建页面的简单实现&#xff0c;文中通过示例代码介绍&#xff0c;感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue拖拽添加组件的简单实现&#xff0c;具体如下&#xff1a; 效果图 实现思路 使用 H5 的新特性拖放操作来实现&#xff0c;拖…

vue拖拽三种方法

如果想拖拽排序的可以用组件&#xff1a;vuedraggable。 组件安装 npm i vuedraggable -S引入 import draggable from vuedraggable配置项 group: string or array 分组用的&#xff0c;同一组的不同list可以相互拖动 sort: boolean 定义是否可以拖拽 delay:number 定义鼠标…

Vue3 CSS v-bind 计算和三元运算

官方文档 中指出&#xff1a;CSS 中的 v-bind 支持 JavaScript 表达式&#xff0c;但需要用引号包裹起来&#xff1a; 例子如下&#xff1a; <script lang"ts" setup> const treeContentWidth ref(140); </script><style lang"less" scop…

【记】Vue - 拖拽元素组件实现

需求描述&#xff1a; 1.可实现PC/移动端元素拖拽移动 2.支持2种模式&#xff1a;1.元素跟随光标点放置2.元素在光标点平齐位置靠侧边吸附 市面上估计有很多这种组件和功能了&#xff0c;但我没找到合适的&#xff0c;用了VueUse的useDraggable Function感觉不太适合某些应用…

Vue:可拖拽组件

在实际开发中&#xff0c;很可能会遇到开发可拖拽组件的需求&#xff0c;目的是应对某些弹框组件会遮盖某些重要信息/可操作面板&#xff0c;通过可拖拽的形式可以将上层的弹框组件移动到其他位置&#xff0c;从而不影响整个系统的操作。下面&#xff0c;我们分两步走&#xff…

vue+ element 三元运算符设置按钮样式

效果图 代码块 <el-button-group><el-button size"small" click"notSelect()" :class"[status 1?isActive:]" autofocus"true" v-focus plain>待选</el-button><el-button size"small" click"…

vue三目运算符可以写html代码么,Vue-js之文本渲染、属性(样式)绑定、三元运算符、事件处理...

文本渲染之3种方式 1.{{}}&#xff1a;插值表达式 弊端&#xff1a;会出现页面闪烁问题 v-text&#xff1a;把vue实例中的内容当作纯文本&#xff0c;显示在浏览器 v-html&#xff1a;把vue实例中的内容进行渲染后&#xff0c;浏览器会再次执行文本渲染 {{msg}} let vm new Vu…

vue中的三元运算符

我们要做的效果如下&#xff1a; 如上图的全部分类效果&#xff0c;符号、的样式具体写法如下图&#xff1a;数据如下&#xff1a; 补充&#xff1a;我们一开始想的可能是在数据中直接加符号、&#xff0c;但是脑子想让我换个想法&#xff0c;所以想先控制显示&#xff0c;第一…

vue 在 html标签上 做三元运算

众所周知&#xff0c;在js 中 a<b?‘方法一’:‘方法二’ 这种 三元运算 是比较方便快捷&#xff0c;那么如何在html标签上直接使用呢&#xff1f; 在 标签包裹中&#xff0c;一半为内容&#xff0c;可以直接使用 例如&#xff1a; <p class"price">{{p…

抖音快手短视频去水印API,接口开发文档

开发者官网&#xff1a;http://api.lingquan166.com/ 简介&#xff1a;根据抖音、微视、小红书、皮皮搞笑等APP中复制出来的链接&#xff0c;解析获取短视频的标题、封面、无水印短视频地址等信息。 接口地址&#xff1a; https://api.lingquan166.com/dsp?token122917VU601…

【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )

一. 中断控制 ( 基于 S3C6410 开发板 ) 1. 关闭中断的两个步骤 (1) 关闭中断步骤 2. CPRS 寄存器中的中断控制位 (1) CPRS 寄存器简介(2) CPRS 寄存器 中断控制 相关 位 3. 中断使能寄存器 (1) 中断使能寄存器简介(2) 中断屏蔽寄存器简介 二. 关闭中断 代码示例 1. 汇编代码编…

图像哈希算法

最近在回顾一些经典的图像哈希算法&#xff0c;本文大致介绍了一些常用的图像哈希算法&#xff0c;暂时先列一个框架&#xff0c;待日后补充。 参考链接&#xff1a; 【1】基于内容的图像哈希算法研究 【2】图像聚类-谱聚类 【3】球哈希Spherical Hashing 部分哈希源码及大牛…

消息机制(Handle机制)

消息机制简介- Handler是Android消息机制的上层接口。Handle的使用过程简单&#xff0c;通过它可以轻松将一个任务切换到Handle所在的线程中去执行。通常情况下&#xff0c;Handle的使用场景是更新UI。 在子线程中进行耗时操作&#xff0c;执行完操作后&#xff0c;发送消息&…

魔百盒九联UNT402A_S905L3_线刷固件包_语音蓝牙正常

魔百盒九联UNT402A_S905L3_线刷固件包_语音蓝牙正常 固件特点&#xff1a; 1、适用于九联UNT402A&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&#xff0c;运行速度提升…

大规模特征向量检索算法总结 (LSH PQ HNSW)

大规模特征向量检索算法总结 (LSH PQ HNSW) 转自&#xff1a;https://www.6aiq.com/article/1587522027341 向量检索基本概念 向量从表现形式上就是一个一维数组。我们需要解决的问题是使用下面的公式度量距离寻找最相似的 K 个向量。 欧式距离&#xff1a; 两点间的真实距…

面向高光谱图像的多特征融合哈希

原文&#xff1a;Efficient Multiple Feature Fusion With Hashing for Hyperspectral Imagery Classification: A Comparative Study 面向高光谱图像的多特征融合哈希 I. IntroductionII. MFH FrameworkIII. Feature HashingIV. Experiment SettingA. Data SetsB. Multiple Fe…

论文笔记-迭代量化哈希ITQ

推荐一个大牛的博客&#xff1a;http://yongyuan.name/【这篇博文也借鉴了他的博客&#xff0c;建议直接看他的博文加上论文】 自己的这个就是一个论文笔记&#xff0c;为了自己日后复习&#xff1b; 【待补充...因为笔记太乱了 懒得整理 】

ITQ(Iterative Quantization)迭代量化方法详解 hash 哈希算法

看过的文章&#xff0c;不做记录&#xff0c;即便当时理解透了&#xff0c;过一段时间后&#xff0c;知识总会模糊不清。所以从现在开始&#xff0c;对一些自己阅读过的一些精彩的文章&#xff0c;悉心记录&#xff0c;方便自己查阅温故&#xff0c;当然如果对同行有所裨益的话…