一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)

未经作者允许,不可转载,如有错误,欢迎指正o( ̄▽ ̄)o

Java书写规范

类名大驼峰,标识符小驼峰,关键字、右括号、右花括号后加空格。方法与方法之间加一个空行。

IDEA的一些常用快捷键

  • ctrl + shift + f10快速编译运行当前java文件

  • 对于报错(红色曲线)alt + enter查看详细错误信息以及推荐解决方案

  • alt + shift + insert对一个类进行快速创建构造器访问器toString等方法

  • 要查看某个类接口等的具体实现,ctrl+鼠标左键进入

Java类中作为成员变量的类

Scanner in = new Scanner(System.in);

Java类中的成员变量可以是一个类,其实String就是一个类,这下懂了吧,所以System.in是一个InputStream类型的静态对象,而Scanner in = new Scanner(System.in)是调用了Scanner类的构造方法实例化一个对输入流的扫描仪对象。

Java源文件中只能有一个public类

一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。

Java中如何直接打印数组

int A[] = {9, 4, 2, 1, 8, 5, 6, 3, 7, 10};
System.out.println("直接打印A数组");
System.out.println(A);
System.out.println("通过Arrays.toString()方法打印A");
System.out.println(Arrays.toString(A));

输出结果:

直接打印A数组
[I@58ceff1
通过Arrays.toString()方法打印A
[9, 4, 2, 1, 8, 5, 6, 3, 7, 10]

由于数组对象没有重写Object类的toString方法,所以直接打印会打印出原始定义的格式的结果,其中在Object类中的toString为:

getClass().getName() + '@' + Integer.toHexString(hashCode())

关于在Main方法中调用其它方法

  • main方法是静态方法,只能访问自身的静态方法和静态字段,如果要使用非静态成员字段或者非静态方法,需要先在main函数中初始化一个其他的类,再通过打点调用该类的非静态方法或者非静态字段

  • 非静态方法可以通过类名访问类的静态字段以及静态方法,但在类的内部不可以直接调用

Java成员变量和局部变量的对比

  • 成员变量在方法外声明,局部变量在方法外声明
  • 成员变量随着对象的创建而创建,随着对象的消失而消失。局部变量:随着方法的调用而存在,随着方法调用结束而消失
  • 成员变量如果没有人为初始化由默认构造器进行初始化,而局部变量必须人为初始化。
  • 局部变量名可以与成员变量名相同,遵循就近原则,若不是在构造器中用this.value = value这种情况,为了避免歧义与不易阅读,尽量避免同名

局部变量不能使用访问修饰符

由于局部变量的生命周期,可以理解为局部变量本身就是由访问权限设定的,它仅提供本方法在调用时使用,并不提供给其他方法和类使用,所以不需要访问权限修饰符

用二维数组打印杨辉三角

int[][] C = new int[5][5];
C[0][0] = 1;
System.out.println(Arrays.toString(C[0]));
for (int i = 1; i < C.length; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) C[i][j] = 1;
else C[i][j] = C[i-1][j] + C[i-1][j-1];
}
System.out.println(Arrays.toString(C[i]));
}
System.out.println(Arrays.toString(C));

输出结果:

[1, 0, 0, 0, 0]
[1, 1, 0, 0, 0]
[1, 2, 1, 0, 0]
[1, 3, 3, 1, 0]
[1, 4, 6, 4, 1]
[[I@58ceff1, [I@7c30a502, [I@49e4cb85, [I@2133c8f8, [I@43a25848]

这里最后一句输出对应结果是由于Array.toString以二维数组为参数,底层将每个一维数组作为一个对象直接调用Object类的原始toString方法导致

初始化块与静态初始化块

这里要提及三种初始化类中成员变量字段的方法:(摘自Java核心技术卷一)

  • 在构造器中设置值
  • 在声明中直接赋值
  • 通过初始化块赋值

关于初始化执行顺序:

1.如果构造器第一行调用另一个构造器,则基于所提供的参数执行第二个构造器

2.否则,所有字段初始化为默认值(0,false,null),按照在类声明中出现的顺序,执行所有字段初始化方法和初始化块

3.执行构造器主体部分代码

注意:在类第一次加载的时候,将会进行静态字段的初始化,除非将静态字段显式设置为其他值,否则也按照默认值进行初始化(0,false,null),所有静态字段初始化方法以及静态初始化块都将依照类声明中的出现顺序执行。

以下是关于初始化过程编写的一个测试程序

public class Test1 {
public static void main(String[] args) {
Person person = new Person("构造器初始化", 5);
System.out.println(person.getName() + person.getAge());
}
} class Person {
private String name = "直接在声明中给非静态字段赋值";
private int age = 3;
private static String name2 = "直接在声明中给静态字段赋值";
private static int age2 = 1; static
{
System.out.println(name2 + age2);
name2 = "静态初始化块";
age2 = 2;
System.out.println(name2 + age2);
} {
System.out.println(name + age);
name = "普通初始化块";
age = 4;
System.out.println(name + age);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

输出结果:

直接在声明中给静态字段赋值1
静态初始化块2
直接在声明中给非静态字段赋值3
普通初始化块4
构造器初始化5

可以看到通过不同的初始化方法,其执行的先后有明显的不同,简单总结为:声明中为静态字段赋值 > 静态初始化块 > 声明中为字段赋值 > 初始化块 > 构造器初始化

关于不允许使用静态构造函数

看到一种说法比较令我信服:静态属于类,而构造函数属于对象,具体说就是静态方法、静态初始化块、静态成员变量属于该类,而构造器属于具体的实例对象,在用new运算符创建实例时调用,由于构造函数不是类属性,因此有理由认为它不能是静态的。

上文出处:https://www.cnblogs.com/java-friend/p/11750671.html

补充:不考虑访问修饰符,可以记忆:静态方法只能调用静态,而非静态方法都可以调用,公用的大家都能用而自己的只能自己用

关于private static与public static

出于对字段数据的封装,由private修饰的成员变量只能由本类的公共方法供其他类调用修改该private字段的数据,因此:

  • private static修饰的字段:要在此基础上增加static的限制,被private static修饰的成员变量(就像是由类私有的变量)只能静态方法调用,或者本类中的非静态方法调用,在外部由这个类创建的对象,或者直接使用这个类去打点访问都是非法的(这时对于其他类来说必须要用该类公开的方法去调用该private static修饰的字段值)

  • public static修饰的字段:常用的是为该类提供对外暴露即可以被类名直接调用的静态常量(不需要经过该类的方法去访问),用于修饰工具方法或者工具常量

一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)的更多相关文章

  1. dubbo初认知(dubbo和springCloud关系,在微服务架构中的作用等)(持续更新中)

    一:dubbo是什么? dobbuo是阿里开源的一个高性能优秀的服务框架, 可通过高性能的 RPC 实现服务的输出和输入功能,使得应用可以和 高性能的rpc实现输入和输出的功能,可以了  Spring ...

  2. iOS中容易混淆的知识点(持续更新中)

    1.成员变量和属性的区别 @interface Person : NSObject { NSString *_sex; } @property (nonatomic, copy) NSString * ...

  3. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  4. 2020年腾讯实习生C++面试题&持续更新中(3)

    2020年腾讯实习生C++面试题&持续更新中(3) hello,大家好,我是好好学习,天天编程的天天. 来给大家大家分享腾讯实习生面经了. 天天希望大家看到面经后一定要做充分的准备,结合自己掌 ...

  5. html知识点汇总(持续更新中)

    本人从事前端行业三年多,打算从今天开始整理一些关于前端的一些比较经典的知识点,持续更新中...希望能对一些相关知识点有疑问的朋友有一些帮助! HTML篇: 1.常见的行内元素/块级元素/空元素有哪些? ...

  6. html2canvas - 项目中遇到的那些坑点汇总(更新中...)

    截图模糊    原理就是讲canvas画布的width和height放大两倍. 后来学习canvas的时候,才了解到这种写法不同于css的宽高设置, 因为css里的只是展示画布显示的大小,不像这样是c ...

  7. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  8. iOS --- 总结Objective-C中经常使用的宏定义(持续更新中)

    将iOS开发中经常使用的宏定义整理例如以下,仅包括Objective-C. 而对于Swift,不能使用宏,则能够定义全局函数或者extension.请參考博客iOS - 总结Swift中经常使用的全局 ...

  9. 2020年腾讯实习生C++面试题&持续更新中(1)

    2020年腾讯实习生C++面试题&持续更新中(1) 腾讯面试整理(1) 最近大三的学生找实习生的同学非常多,给大家分享一篇腾讯实习生的面试题,关于面试题,会持续更新~~~ 也算是今天开通博客的 ...

随机推荐

  1. 【译】为什么Rust中的BTreeMap没有with_capacity()方法?

    原文标题:Why doesn't Rust's BTreeMap have a with_capacity() method? 原文链接:https://www.nicolas-hahn.com/20 ...

  2. python制作命令行工具——fire

    python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...

  3. 使用MySQL Shell创建MGR

    本篇知识点: 配置MGR所需的参数 使用MySQL Shell配置MGR shell.connect() var 设定临时变量 dba.createCluster() dba.getCluster() ...

  4. 三、Jmeter发送请求

    Jmeter的使用例子,发送一个get请求 1.打开Jmeter,选中Test Plan右键 选择 "添加"--"线程(用户)"--"线程组" ...

  5. mysql 5.7全备脚本

    #!/bin/bash mysql_user="root" mysql_password="mysqlpassword" mysql_host="19 ...

  6. Typora+图床详解(小白都能学得会)

    Typora+图床详解(小白都能学得会) 1 了解工作 博客中用的笔记软件--Typora(Markdown语法) 博客中用的图床--阿里云对象存储(Object Storage Service,简称 ...

  7. 解决IDEA Maven下载依赖包速度慢问题

    右键项目,maven选项,"Open setting.xml"或"Create setting.xml",在 mirrors 节点添加下面代码. <mir ...

  8. 重写Laravel异常处理类

    现在开发前后端分离变得越来越流行了,后端只提供接口返回json格式的数据,即使是错误信息也要以json格式来返回,然而目前无论是Laravel框架还是ThinkPHP框架,都只提供了返回json数据的 ...

  9. disable_functions Bypass

    参考文章和poc(文中均有poc下载地址) : https://www.uedbox.com/post/59295/ https://www.uedbox.com/post/59402/ 当然 fre ...

  10. ecshop v2 v3 EXP

    import requests import binascii def get_v2Payload(code): '''Ecshop V2.x payload''' code = "{$ab ...