第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章 异常、断言和日志


《Java核心技术卷1》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 网络推广外包浅析为什么网络推广外包中网站优化比百度竞价更友好?
  2. gitlub统计一个人提交代码行数
  3. Android高效开发:
  4. Android运行Socket项目时出现错误 Error: ShouldNotReachHere()
  5. python自动汇总excel_RPA手把手:Python轻松实现EXCEL自动化
  6. JQuery 获得绝对,相对位置的坐标方法
  7. Telerik for AJAX RadGrid控件
  8. 【知识分享】汽车搭载的车载摄像头分类
  9. FPGA的Zynq 7000学习--基于黑金AX7010开发板的Hello World 实验
  10. WIN10合并磁盘扩展区是灰色的
  11. [大数据面试]--智力题(2)
  12. Dispose 和 GC 注意点
  13. ACL 2020 | 特定风格标题生成《Hooks in the headline》论文阅读笔记
  14. iphone同步钱包_Apple“钱包”原来这么好用、方便
  15. echarts实现多个y轴
  16. 利用谷歌开源工具 sfntly ,修改字体文件制作想要的字体文件
  17. 【MuMu模拟器】玩崩坏3的左摇杆(方向键)设置问题解决方法
  18. 非常详细的Fiddler工具使用说明(包含APP抓包)
  19. 多目标进化算法基础知识整理
  20. android 辐射动画_Android仿微信雷达辐射搜索好友(逻辑清晰实现简单)

热门文章

  1. 掘金者说-第8期-为圆满的人生作准备
  2. 我们信仰互联网——刘韧作品全集(全6册)
  3. asterisk zap模拟卡的技术详解和疑难杂症以及拟线FXO的主叫号码识别(来电显示):
  4. VL50-简易秒表,60秒钟进位1分钟,60分钟是一小时,设计进制到60分钟时暂停计数
  5. @NotNull和@NonNull的区别和使用
  6. Lombok @NonNull注解
  7. Delphi XE post中文乱码问题处理
  8. 多态与instanceof关键字
  9. 同相放大电路电阻热噪声分析的一些思考
  10. [Flutter]启动:调试运行