Java小知识点总结
配置
数据库配置文件
我以yml为例,以后直接复制,不要在自己写了
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
username: root
password: 123456
基础知识
Switch
分支需要注意的问题,例如switch case 这个条件分支,switch的变量和case后的常量必须是同一个类型的
例如
int a =9;
switch (a)
{
case a<10: //这是错的
System.out.println("abc");
break;
case 8:
System.out.println("123");
break;
}
a是int变量,第一个case后面是a<10是一个Bool值的类型,这就是错的,第二个case后的8才是对的。
对于switch这个分支条件,我居然还是不熟悉。例如以下的例子:
package com.company;
public class Main {
public static void main(String[] args) {
int age=8;
switch (age) {
case 0:
System.out.println("0");
case 1:
System.out.println("1");
default:
System.out.println("默认");
}
}
}
像这种,输出的结果是默认,这是毫无疑问的,但是接下来的这个例子,我就疏忽了:
package com.company;
public class Main {
public static void main(String[] args) {
int age=8;
switch (age) {
default:
System.out.println("默认");
case 0:
System.out.println("0");
case 1:
System.out.println("1");
}
}
}
这个例子的输出结果是 默认 0 1 ,我是出乎意料的,说明基本功不扎实。 这个例子把Default放到了第一位,所以会先执行default语句,而switch在执行过一次之后,假如没有break语句,那么switch会把接下来的所有分支都执行一边,所以break的意义还是非常大的。
i++和++i
这个其实很早就学过了,但是今天看了一道面试题,居然还是不会
i++是先赋值,再加1,而++i是先加1,再赋值。
注意:i=i++和i++不是一回事 |
现在来开始讲解了,我举个栗子
public void test(){
int i=1;
i=i++;
System.out.println(i++);
}
这个方法的执行结果是1,原因就是i++是先赋值,再加1。i=i++可以看下图,i=i++先执行的是i++,i会放到操作数栈,为1,然后++是在局部变量表加的,i这个时候为2,然后i++算完了,结果是i=2,操作数栈是1,这个时候i=i++,要把值赋值给i,这个时候,操作数栈的1会赋值给i,可以看见i从2又变成1了。
下面的输出语句也是,由于i++的先赋值再加1的特点,会先输出,再加1
我们再来看一个例子
public void test(){
int i=1;
i++;
System.out.println(i++);
}
这个代码输出的是2,这个例子很形象的讲述了i++先赋值在加1的特点,第二行单独的i++的时候,由于没有赋值对象,所以i++就变成了i=i+1;这个时候i是2了,然后下面输出语句的i++,会先打印,再加1,所以结果还是2
好了,再贴一个for循环的例子
public void test(){
for (int i = 0; i < 10;i++) {
System.out.println(i);
}
}
这个例子都很熟悉了,输出结果就是0到9,现在我改一下
public void test(){
for (int i = 0; i < 10;i=i++) {
System.out.println(i);
}
}
我让i++那里有一个赋值了,完了i++先赋值后加1的特点出来了,结果就是无限循环输出0
最后,我把我看的那道面试题放出来吧
public void test(){
int i=1; //i=1
i=i++; //i=1,因为先赋值
int j=i++; //j=1,i为2,详情见下图图解
int k=i+ ++i * i++; //2+ 3 * 3 ++i之后,i变成3了
System.out.println("i=" + i); //i++,3变4
System.out.println("j=" + j);
System.out.println("k=" + k);
}
答案是4 1 11,具体讲解看注释
int j=i++;图解如下:
快捷打代码
由于我使用的IDE是idea,我不知道怎么去快捷的打出代码,Visual Studio可以双击Tab键补全代码,idea的方法是,打的时候找那种带有Create Loop字样的,例如我打一个for循环:
不要选择上面那个for,否则括号什么的还得自己去打。
输入数据
不知道Java里面是怎么输入的,总结一下:
int a=cin.nextInt();//输入一个整数
System.out.println(a);
double b=cin.nextDouble();//输入一个双精度的浮点数
System.out.println(b);
String str=cin.next();//输入一个单词
System.out.println(str);
String str2=cin.nextLine();//输入一行,中间可有多个空格
System.out.println(str2);
这个是输入,但是我不是很懂下面两个输入字符的语句,两个不能同时输入?而且我还分不清两个的区别。
输出的话,就是有一点,加ln的会换行,不加ln就不会换行了。
代码折叠
Visual Studio里面有一个很好用的功能,就是折叠代码,用的是#region #endregion ,非常好用,idea呢也有这个功能,不过使用的是//region //endregion 把#换成了//
super关键字
Java中的super关键字,主要是调用父类的一些属性和方法,例如:
Vae vae=new Vae();
vae.Eat();
vae.GetName();
这里我的Vae类是继承了Person类的,如下:
super类就是子类中可以调用父类的东西。
instanceof 防止类型强制转换带来的错误
Java中的强制类型转换,有时候类型转换会出现溢出的错误,我们可以使用 instanceof 来防止:
int a=10;
Object object=a;
int b=(int)object;
System.out.println(b);
if (object instanceof Double) {
Double c=(double)object;
System.out.println(c);
}else {
System.out.println("这个object对象不能转化为Double类型的");
}
这样就不会出现强制类型转换的溢出错误了。
继承
Java中继承类的关键字是 extends 继承接口的关键字是 implements
第一个Java程序
这里我会使用命令框的方式写一个Java程序
先新建一个文本文件,改名为Vae.java,然后写以下代码:
class Hello{
public static void main(String args[]){
System.out.println("许嵩是最佳歌手");
}
}
然后保存,使用命令框进行编译:javac Vae.java
注意,有时候编码的话会报错: 编码GBK的不可映射字符
原因参考:这篇文章
这时会出现Hello.class
再输入java Hello就可以输出语句了。如图:
Java的一个反编译软件,叫XJad,还不错
直接打开编译过的class字节码,是乱码,直接用XJad打开就可以看了
有一点有意思的是,注释是不会显示出来的,注释在代码编译的过程中,就没有了。
Java多态,有一些需要讲一下
1.成员变量
成员变量的多态,是先父类再子类。
2.成员函数
成员函数的多态,是子类覆盖父类,因为函数有一种特性,就是函数会覆盖,所以父子类都有的方法,子类会覆盖父类
3.静态函数
静态函数和普通的成员函数是不一样的,都划在了静态内存区,调用的时候还是哪个类的对象调用的就显示哪个方法
package com.company;
public class Main {
public static void main(String[] args) {
System.out.println("大家好,我是Vae");
Fu f=new Zi();
System.out.println(f.num);
f.start();
Fu.Vae();
Zi z=new Zi();
System.out.println(z.num);
z.start();
Zi.Vae();
}
}
class Fu{
int num=3;
void start(){
System.out.println("我是父类");
}
static void Vae(){
System.out.println("我是静态父类");
}
}
class Zi extends Fu{
int num=5;
void start(){
System.out.println("我是子类");
}
static void Vae(){
System.out.println("我是静态子类");
}
}
这个是代码,执行一下,结果如下:
也就是,普通方法的多态是会覆盖的。变量和静态方法,都还是调用的父类里面的。
快捷敲代码
1.快捷方式,打东西,后面.sout就可以快速输出
其他的也是,比如.for .fori什么的
添加测试类
2.添加测试类,如果我想给一个接口,类啥的添加一个测试单元,我可以这样,在类上按下alt+enter键,出来这样,选择创建测试
自己选择测试的方法和路径,用的Junit,这个我讲过
接口上写注释
3.接口上写注释,一般都在接口上写方法的注释,这样我们继承接口的方法实现,鼠标放上去会显示注释的内容
注释这样写
在方法上面打出 /** 然后直接敲回车就可以了,写上汉字。来看看方法的实现的注释的展现
真的是很棒了,这个有开关,开关的地方在
错误集合
java.lang.ClassNotFoundException:
快气死我了,就是报这个错误,后来搜到一篇文章。点我 他说,要把你的jar包导入到lib文件夹下面才行,我尝试了可以了,Java Web可以链接数据库了,但是有几个问题还不懂,解决不了
我现在是写死的数据库连接,我想读取配置文件都不行,报错,不懂。。。。。
Java小知识点总结的更多相关文章
- java小知识点简单回顾
1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...
- java 小知识点
1.转Java中Vector和ArrayList的区别 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存 ...
- JAVA小知识点-Finally和Return的执行关系
如果Try和Catch中存在return语句的时候Finally内的语句是否会执行,执行的时候对结果又有什么影响呢?我写了个例子来试验这个问题: public static Map<String ...
- java小知识点汇总
1.ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安 ...
- java小知识点 2015/10/6
java中length,length(),size()区别: 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度 2 java中的length()方法是针对字 ...
- java小知识点
1 判断是否为win系统 int version=System.getProperty("os.name").toLowerCase().indexOf("windows ...
- Java小知识点学习--------数组和位运算小知识点
位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2; 此时两个数组变量都会同一时 ...
- Java小知识点总结01
1. 整数相乘或者相加,如果超过最大整数值,会变成负数 2. 字符串比较可以使用:s1.compareTo(s2) ,如果s1大于s2返回值大于1,等于返回值等于0,小于返回值小于1 3. char值 ...
- Java学习过程中的总结的小知识点(长期更新)
Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...
随机推荐
- Github上如何查看当前最流行的开源项目
先声明下:只针对初学者,大神的话勿喷. 针对题标的这个问题,按照如下步骤操作即可: 进入Github网站后,显示的页面如下所示: 点击"Explore"链接,进入如下页面: 页面上 ...
- Linux Mysql 每天定时备份
1.创建脚本 dbback.sh,内容如下: #!/bin/bash mysqldump -uroot -p123456 hexin>/work/db_back/hexin_$(date +%Y ...
- Kafka设计解析(七)- Kafka Stream
本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream.接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以 ...
- python基础-小练习
三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 购物车程序 要求: 用户名和密码存放于文件中,格式为:egon|egon123 启动程序后,先登录,登录成功则让用户输入工资,然 ...
- 初学python必备基础知识
一,编程语言介绍 1.机器语言:直接用二进制编程,直接控制硬件,需要掌握硬件的操作细节 优点:执行效率高 缺点: 开发效率低 2.汇编语言:用英文标签取代二进制指令去编写程序,直接控制硬件,需 ...
- 相约南湖,南京都昌信息亮相南湖HIT论坛
金秋十月,雨过南湖水似油 ,烟雾蒙蒙净长空 2017年10月15日, 南湖HIT论坛迎来了第六届.本次论坛吸引了500名来自全国各地医疗机构.卫生行政主管部门的信息化主管和医疗IT企业的精英,齐聚嘉兴 ...
- 算法笔记-状压dp
状压dp 就是把状态压缩的dp 这样还是一种暴力但相对于纯暴力还是优雅的多. 实际上dp就是经过优化的暴力罢了 首先要了解位运算 给个链接吧 [https://blog.csdn.net/u01337 ...
- iview 动态渲染menu时active-name无效的问题
动态渲染menu时,如果需要active-name,那么name只能绑定index,动态渲染的数组初始必须有一个空对象.否则无法使用active-name属性.注:仅限3.0版本,不排除新版本修复的可 ...
- 《Effective C++》继承与面对对象设计:条款32-条款40
条款32:确定你的public继承塑模出is-a关系 public继承意味着is-a.适用于base class身上的每一个函数也一定适用于derived class. 条款33:避免遮掩继承而来的名 ...
- Eclipse 查看 WebService 服务请求和响应消息
每个WebService 对入参和返参都是有自己的要求的:别人调用我的WebService,需要按照我的要求进行传参.当我返回数据时,我也得告诉别人,我的返回数据是怎样组织的,方便别人读取. 那怎样查 ...