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内容请搜索靠谱客的其他文章。
发表评论 取消回复