我是靠谱客的博主 单纯宝马,这篇文章主要介绍java语言1001java语言,GitHub - chenhu1001/java-learning-notes: java学习笔记,现在分享给大家,希望可以做个参考。

java-learning-notes

1、java命令

javac:用于将java源文件编译为class字节码文件

java:可以运行class字节码文件,如:java HelloWorld

2、java分为三个体系

JavaSE(J2SE)java平台标准版

JavaEE(J2EE)java平台企业版

JavaME(J2ME)java平台微型版

3、java语言特性

java语言支持动态绑定,而C++只对虚函数使用动态绑定。

4、类中包含的变量

局部变量

成员变量

类变量(必须声明为static)

5、源文件声明规则

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

一个源文件可以有多个非public类;

源文件的名称应该和public类的类名保持一致;

如果一个类定义在某个包中,那么package语句应该在源文件的首行;

如果源文件中包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面;

import语句和package语句对源文件中定义的所有类都有效,在同一源文件中,不能给不同的类不同的包声明。

6、java数据类型

byte(有符号8位整数)

short

int

long

float

double

char

7、java常量

final double PI = 3.1415927

8、局部变量和实例变量区别

局部变量

实例变量

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

可用于实例变量

局部变量无默认值

有默认值

9、类变量(静态变量)

类变量被声明为public static final类型时,类变量名称必须使用大写字母。

10、访问控制

修饰符

当前类

同一包内

子孙类

其他包

pulic

protected

×

default

×

×

private

×

×

×

protected访问修饰符不能修饰类和接口,接口中的成员变量和成员方法不能声明为protected。

11、访问控制和继承

父类

子类

public

必须public

protected

protected或public,不能为private

private

不能被继承

12、非访问修饰符

static->类变量和类方法

final->修饰类不能被继承,方法不能被重写,修饰变量不可修改(接近const)

Abstract->创建抽象类和抽象方法

13、static修饰符

静态变量

静态方法

14、Final修饰符

Final变量能被显式地初始化,并且只能被初始化一次。被声明为final的对象的引用不能指向不同的对象,但是final对象里的数据可以被改变

15、Abstract修饰符

抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充

一个类不能同时被Abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误

抽象类可以包含抽象方法和非抽象方法

抽象方法是种没有任何实现的方法,该方法的具体实现由子类提供,抽象方法不能声明为final和static

任何继承抽象类的子类必须要实现父类的所有抽象方法,除非子类也是抽象类

16、instanceof运算符

用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)

String name = "James";

boolean result = name instanceof String; // result返回true

如果被比较的对象兼容于右侧类型,改运算符仍然返回true

17、for语句

for (声明语句:表达式) {

// 代码语句

}

18、Number方法

19、Java character类

20、String类

String(不可改变),如需改变应选择使用StringBuffer和StringBuilder类

StringBuffer(线程安全)

StringBuilder(速度快)

21、Java休眠(sleep)

Thread.sleep(1000*3); // 休眠3秒

22、构造方法

构造方法和它所在类的名字相同,但构造方法没有返回值

23、可变参数

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在它之前声明

24、finalize()方法

finalize()方法里,你必须指定在对象销毁时要执行的操作

protect void finalize() throws java.lang.Throwable {

super.finalize()

// 对象销毁时要执行的操作

}

25、抽象类和接口的区别

想让一些方法有默认实现,用抽象类

想实现多重继承,用接口

26、重写规则

访问权限必须比父类权限高

27、重载与重写的区别

区别点

重载方法

重写方法

参数列表

必须修改

一定不能修改

返回类型

可以修改

一定不能修改

异常

可以修改

可以减少式删除

访问

可以修改

一定不能做严格的限制(可以降低限制)

28、抽象类、抽象方法

29、接口(interface)

接口是抽象方法的集合。一个类实现一个或者多个接口,因此继承了接口的抽象方法。接口的特点:

不能实例化

没有构造函数

所有方法都是抽象的,同时也是隐式的pulic、static

只能含有声明为final、static的field

30、接口和抽象类的区别

抽象类可以有构造方法,接口不行

抽象类可以有普通成员变量,接口没有

抽象类可以有非抽象方法,接口必须全部抽象

抽象类的访问类型都可以,接口只能是pulic abstract

一个类可以实现多个接口,但只能继承一个抽象类

31、super

注意super的使用,super并没有代表超类的一个引用能力,只是代表调用父类的方法而已

32、@Component, @Service, @Controller, @Repository注解的区别

@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理

@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能

@Repository注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。

@Controller层是spring-mvc的注解,具有将请求进行转发,重定向的功能。

@Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。

用这些注解对应用进行分层之后,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。

33、java只使用try和finally不使用catch的原因和场景

JDK并发工具包中,很多异常处理都使用了如下的结构,如AbstractExecutorService,即只有try和finally没有catch。

class X

{

private final ReentrantLock lock = new ReentrantLock();

// ...

public void m()

{

lock.lock(); // block until condition holds

try

{

// ... method body

} finally

{

lock.unlock()

}

}

}

为什么要使用这种结构?有什么好处呢?先看下面的代码

public void testTryAndFinally(String name)

{

try

{

name.length();// NullPointerException

}

finally

{

System.out.println("aa");

}

}

传递null调用该方法的执行结果是:在控制台打印aa,并抛出NullPointerException。即程序的执行流程是先执行try块,出现异常后执行finally块,最后向调用者抛出try中的异常。这种执行结果是很正常的,因为没有catch异常处理器,所有该方法只能将产生的异常向外抛;因为有finally,所以会在方法返回抛出异常之前,先执行finally代码块中的清理工作。

这种做法的好处是什么呢?对于testTryAndFinally来说,它做了自己必须要做的事(finally),并向外抛出自己无法处理的异常;对于调用者来说,能够感知出现的异常,并可以按照需要进行处理。也就是说这种结构实现了职责的分离,实现了异常处理(throw)与异常清理(finally)的解耦,让不同的方法专注于自己应该做的事。

那什么时候使用try-finally,什么时候使用try-catch-finally呢?很显然这取决于方法本身是否能够处理try中出现的异常。如果自己可以处理,那么直接catch住,不用抛给方法的调用者;如果自己不知道怎么处理,就应该将异常向外抛,能够让调用者知道发生了异常。即在方法的签名中声明throws可能出现而自己又无法处理的异常,但是在方法内部做自己应该的事情。

java 的异常处理中,

在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块;

如果没有finally代码块,整个方法在执行完try代码块后返回相应的值来结束整个方法;

如果有finally代码块,此时程序执行到try代码块里的return语句之时并不会立即执行return,而是先去执行finally代码块里的代码;

若finally代码块里没有return或没有能够终止程序的代码,程序将在执行完finally代码块代码之后再返回try代码块执行return语句来结束整个方法;

若finally代码块里有return或含有能够终止程序的代码,方法将在执行完finally之后被结束,不再跳回try代码块执行return;

在抛出异常的情况下,原理也是和上面的一样的,你把上面说到的try换成catch去理解就OK了 _

34、spring4.x定时任务执行

package com.yzhotel.task;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

@Component

@EnableScheduling

public class WxTask {

@Scheduled(cron = "0/5 * * * * ?")

public void sendMessage(){

System.out.println("定时任务执行了!");

}

}

35、Mac环境中Jenkins的停止和启动命令

启动

sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

停止

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

36、web.xml 配置中classpath: 与classpath*:的区别

classpath:只会到你的class路径中查找找文件;

classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

37、dubbo类型转换

服务提供端:

public String getOrganizationList() {

List datas = mapper.getOrganizationList();

String result = (ResponseResult.succ(datas)).toString();

return result;

}

服务消费端:

public ResponseResult test() {

DubboOrganizationService dubboOrganizationService = SpringApplicationContext.context.getBean(DubboOrganizationService.class);

String str = dubboOrganizationService.getOrganizationList();

JSONObject jsStr = JSONObject.parseObject(str);

String statusCode = jsStr.getString("statusCode");

ResponseResult responseResult = (ResponseResult)JSONObject.toJavaObject(jsStr,ResponseResult.class);

return responseResult;

}

38、Mybatis使用

(1)拼接字段

concat(tp.project_name,'-', taf.form_name) project_form_name

(2)常用Mapper

select taf.*, tp.project_name, v.venue_name, concat(tp.project_name,'-', taf.form_name) project_form_name

from tk_art_form taf

left join tk_project tp on taf.project_id = tp.id

left join (select tvv.*, ttv.venue_name from tk_venue_version tvv

left join tk_the_venue ttv on tvv.venue_id = ttv.id) v

on taf.venue_version_id = v.id

WHERE taf.form_delete_status='1113002'

AND LOCATE(#{formName},taf.form_name)>0

AND taf.project_id=#{projectId}

AND #{showBeginTime}<taf.show_date

AND #{showEndTime}>taf.show_date

AND taf.form_cancel_status =#{formCancelStatus}

39、@Autowired(required=false)和@Autowired(required=true)

@Autowired(required=true):当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。

@Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。

40、Maven本地包安装

mvn install:install-file -Dfile=/Users/chenhu/Desktop/taobao.sdk.java-0.0.1.RELEASE.jar -DgroupId=com.tfkj -DartifactId=taobao.sdk.java -Dversion=0.0.1.RELEASE -Dpackaging=jar

41、修改jar包中的配置文件

1、通过vim命令直接编辑jar

vim xxx.jar 该命令首先会列出全部文件,可以通过输入/abc来搜索,定位到对应的abc文件后回车进入配置文件内进行编辑,:wq保存。

2、通过jar命令替换jar包中的文件(也可新增)

列出jar包中的文件清单

jar tf genesys_data_etl-0.0.1-SNAPSHOT.jar

提取出内部jar包的指定文件

jar xf genesys_data_etl-0.0.1-SNAPSHOT.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json

然后可以修改文件

vim BOOT-INF/classes/realtime/t_ivr_data_bj.json

更新配置文件到内部jar包.(存在覆盖,不存在就新增)

jar uf genesys_data_etl-0.0.1-SNAPSHOT.jar BOOT-INF/classes/realtime/t_ivr_data_bj.json

更新内部jar包到jar文件

jar uf genesys_data_etl-0.0.1-SNAPSHOT.jar 内部jar包.jar

可以查看验证是否已经更改

vim genesys_data_etl-0.0.1-SNAPSHOT.jar

3、解压jar包,修改后重新打包jar

解压

unzip genesys_data_etl-0.0.1-SNAPSHOT.jar

移除jar包,最好备份

rm -rf genesys_data_etl-0.0.1-SNAPSHOT.jar

重新打包

jar -cfM0 new-genesys_data_etl-0.0.1-SNAPSHOT.jar *

42、Bean与String相互转换

/**

* 将任意类型转换成字符串

* @param value

* @param

* @return

*/

public static String beanToString(T value) {

Class> clazz = value.getClass();

if(clazz == int.class || clazz == Integer.class) {

return value + "";

}else if(clazz == String.class) {

return (String)value;

}else if(clazz == long.class || clazz == Long.class) {

return value + "";

}else {

return JSON.toJSONString(value);

}

/**

* 把一个字符串转换成bean对象

* @param str

* @param

* @return

*/

public static T stringToBean(String str, Class clazz) {

if(str == null || str.length() <= 0 || clazz == null) {

return null;

}

if(clazz == int.class || clazz == Integer.class) {

return (T)Integer.valueOf(str);

}else if(clazz == String.class) {

return (T)str;

}else if(clazz == long.class || clazz == Long.class) {

return (T)Long.valueOf(str);

}else {

return JSON.toJavaObject(JSON.parseObject(str), clazz);

}

最后

以上就是单纯宝马最近收集整理的关于java语言1001java语言,GitHub - chenhu1001/java-learning-notes: java学习笔记的全部内容,更多相关java语言1001java语言,GitHub内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部