周末总结

本周主要学习了markdown,git,docker等工具的使用。在本周的学习中,初步了解了markdown,git,docker的使用。本周的静态博客部署中,对于怎么显示一个博客内容,有两种,一是把public/下的内容放入nginx,然后配置Nginx配置文件,二是在Dockerfile配置hugo服务器,我刚开始把hugo-linux下到本地,传入github,但是太大了,整个项目有30m,于是在dockerfile中下载hugo,但可能网速有些慢。

cmd alias设置

  1. 创建文件C:\cmd-alias.bat
  2. 注注册表进入HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor,右键新建,字符串值,名为AutoRun,值为C:\cmd-alias.bat,保存退出。

java 查看字节码

  1. cd到java文件目录
  2. javac name.java编译
  3. javap -v name.class显示java编译器生成的字节码,也可以反编译

java格式化代码:Shift Alt L

java assert

public class AssertTest {
public void methodA(int i) {
assert i >= 0 : methodB();
System.out.println(i);
}
public void methodB() {
System.out.println("The value must not be negative");
}
public static void main(String args[]) {
AssertTest test = new AssertTest();
test.methodA(-10);
}
}

记得idea开启断言调试

RUN -> Edit Configurations -> Configuration -> VM options : 输入-ea,点击确定。

编译通不过,methodB()不能是一个void函数,必须有返回值,如int,String等。或者methodB()可以换成有返回值的东西,如i=1,i++等。

assert用法

  1. assert <boolean表达式>

    如果<boolean表达式>为true,则程序继续执行。

    如果为false,则程序抛出AssertionError,并终止执行。

  2. assert <boolean表达式> : <错误信息表达式>

    如果<boolean表达式>为true,则程序继续执行。

    如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。


静态变量

public class Static {
static {
int x = 5;
}
static int x,y;
public static void main(String args[]) {
x--;
myMethod();
System.out.println(x + y + ++x);
}
public static void myMethod() {
y = x++ + ++x;
}
}

首先,需要明白类的加载顺序:

  1. 父类静态对象和静态代码块(并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关.)静态变量最好定义在静态代码块的前面
  2. 子类静态对象和静态代码块
  3. 父类非静态对象和非静态代码块
  4. 父类构造函数
  5. 子类非静态对象和非静态代码块
  6. 子类构造函数

接下来是变量的作用范围(作用域(scope))

在C、C++和Java中,作用去由花括号的位置决定

代码块中的局部变量与作用域

public static void main(String args[]) {
int x = 100;
{
int x = 30;
}
System.out.println(x);
}

报错重复定义

public static void main(String args[]) {
{
int x = 30;
}
int x = 100;
System.out.println(x);
}

代码块中的局部变量已经销毁,能定义

生存周期与作用域的区别:

生存周期: 变量从定义到销毁的时间范围。

作用域: 变量的可见代码域(块作用域,函数作用域,类作用域,程序全局作用域)。

静态变量,全局或局部声明的static变量都存放于程序的全局变量区域,,静态变量的生命周期都是整个源程序。它的作用域决定于它被定义的位置。所以静态变量的作用域<=生存周期。

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

class文件:java字节码文件

static int x;
static {
x = 5;
}

x结果为5

static {
x = 5;
}
static int x;

x结果为5

static {
x = 5;
}
static int x = 1;

x结果为1

static int x = 1;
static {
x = 5;
}

x结果为5

static int x = 1;
static {
int x = 5;
}

x结果为1(static块为局部变量)

static {
int x = 5;
}
static int x = 1;

x结果为1(static块为局部变量)

static String s;
public static void main(String args[]) {
//String s = ""; 1
if (s instanceof String) {
System.out.println("I am true String");
} else {
System.out.println("I am false String");
}
}

运行结果为 "I am false String"如果改成1处则为true

instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例

三元运算符自动转换

public static void main(String[] args) {
int a = 5;
System.out.println("value is "+((a<5) ? 10.9 : 9));
}

输出9.0,根据运算符的精确度类型进行自动类型转换

char x='x';
int i =10;
System.out.println(false ? i : x);
System.out.println(false ? 10 : x);

输出120,x.

java规范中提到,当后两个表达式有一个是常量表达式(10),另外一个类型是T(char)时,而常量表达式可以被T表示时,输出结果是T类型。

Boolean b = new Boolean("dfas"); #能编译,返回false
int c = 0x1234; #能编译通过

线程问题

class MyThread extends Thread {
public void run() {
System.out.println("MyThread: run()");
}
public void start() {
//super.start();
System.out.println("MyThread: start()");
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.println("MyRunnable: run()");
} public void start() {
System.out.println("MyRunnable: start()");
}
}
public class MyTest {
public static void main(String args[]) {
MyThread myThread = new MyThread();
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
myThread.start();
thread.start();
}
} A. Prints : MyThread: start() followed by MyRunnable:run()
B. Prints : MyThread: run() followed by MyRunnable:start()
C. Prints : MyThread: start() followed by MyRunnable:start()
D. Prints : MyThread: run() followed by MyRunnable:run()

打印

MyThread: start()
MyRunnable: run() 在MyThread中start方法加上super.start();
打印
MyThread: start()
MyThread: run()
MyRunnable: run()

A正确,MyThread重写了start方法,实际上只是一个普通方法调用,thread.start()不会调用MyRunnable中的start方法.

线程启动

抛出异常格式

static void throwMethod() throws IllegalAccessException {
System.out.println("Inside throwMethod.");
throw new IllegalAccessException("demo");
} public static void main(String args[]) {
try {
throwMethod();
} catch (IllegalAccessException e) {
System.out.println("Caught " + e);
}
}

注意throwMethod() throws IllegalAccessException

父类子类方法执行

class Base {
int i = 99;
public void amethod() {
System.out.println("Base.amethod()");
}
Base() {
amethod();
}
} public class Derived extends Base {
int i = -1;
public static void main(String argv[]) {
Base b = new Derived();
System.out.println(b.i);
b.amethod();
}
public void amethod() {
System.out.println("Derived.amethod()");
}
}

**初始化:先成员变量再构造方法,先父类再子类

多态表现:有同名方法执行子类的**

class Parent {
private void method1() {
System.out.println("Parent's method1()");
}
public void method2() {
System.out.println("Parent's method2()");
method1();
}
}
class Child extends Parent {
public void method1() {
System.out.println("Child's method1()");
}
public static void main(String args[]) {
Parent p = new Child();
p.method2();
}
}

注意Parent的method1是私有的,所以会调用父类方法

Parent's method2()
Parent's method1()
String str = "Java";
StringBuffer buffer = new StringBuffer(str);
if(str.equals(buffer)) {
System.out.println("Both are equal");
} else {
System.out.println("Both are not equal");
}

返回false,都不是同一个对象,可以看一下equals的源码

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
...
}
return false;
}

7.15实习培训日志 java题解的更多相关文章

  1. 7.19实习培训日志- java进阶

    java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...

  2. 7.20实习培训日志-Java基础程序设计结构

    Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...

  3. 7.17实习培训日志-java基础

    总结 今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式.晚上主要讲了maven的一些基础知识和idea ...

  4. 7.24实习培训日志-Docker-Compose

    Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...

  5. 7.30实习培训日志-SQL优化

    总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...

  6. 7.10实习培训日志-Maven 敏捷编程

    总结 今天早上主要学习了Maven和Idea的Docker插件,遇到了一些坑,对于Idea的Docker插件,不能下载,然后我去访问Idea插件官网,发现被墙了,只要开个VPN就好.下午主要是张总经理 ...

  7. 7.31实习培训日志-docker sql

    docker mysql docker问题 今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint. dockerfi ...

  8. 7.27实习培训日志-Oracle SQL(三)

    Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...

  9. 7.25实习培训日志-Oracle SQL(一)

    Oracle SQL(一) 重点 尽量避免select *,影响性能,不直观. 慎用Distinct,会排序,影响性能,用exists 排序尽量利用索引,索引有序 索引列不要加函数,会使索引失效 外连 ...

随机推荐

  1. EasyPlayer播放海康大华RTSP流时RTSPClient客户端连接兼容问题的解决

    在之前的博客<EasyPlayer RTSP播放器对RTSP播放地址url的通用兼容修改意见>中,我描述了遇到的一个客户在播放大华某款摄像机时地址不兼容的问题,这不,团队刚刚参考我的这个意 ...

  2. HIbernate 注解 mappedBy 与 inverse

    hibernate中 配置文件中的inverse属性意思就是放弃控制权 ,主导权由对方控制,也就是说 我方进行的删除等操作不会影响到对方 即使设置了cascadeType.ALL 这个解释其实就是hi ...

  3. UIWebview加载H5界面侧滑返回上一级

    一.UIWebview的发现 问题发现:当UIWebview王深层次点击的时候,返回时需要webView执行goBack方法一级一级返回,这样看到的webView只是在该界面执行刷新,并看不到类似iO ...

  4. ridge regression 无惩罚,导致预测结果空间过大而无实用价值

    [ biased regression methods to reduce variance---通过偏回归来减小方差] https://onlinecourses.science.psu.edu/s ...

  5. 【题解】 P5022旅行

    [题解]P5022 旅行 当给定你一颗树的时候,这题就是一道送分题,凉心啊! 但是给定你一颗基环树呢? 暴力断环直接跑. 但是数据范围\(n\le 1000\) 乱做就完事了. 考场上这样想的,对于\ ...

  6. Flask:程序结构

    在Flask中需要配置各种各样的参数.比如设置秘钥,比如上一章介绍到的配置数据库类型. app.config['SECRET_KEY']=os.urandom(20) app.config['SQLA ...

  7. centos7 安装php

    http://blog.csdn.net/zhaozuosui/article/details/48394409

  8. 【zabbix】zabbix3.0部署手册

    1.环境准备 Centos 6.X 2.数据库准备 默认centos yum源中mysql包的版本号为5.1,为了能使zabbix 3.0能达到最好的性能效果,安装最新版的mysql数据库. yum ...

  9. Bootstrap——组件

    1.字体图标 <span class="glyphicon glyphicon-star" aria-hidden="true"></span ...

  10. React Native 微信分享闪退的解决办法

    Android中编写微信分享功能时出现了闪退的现象,经过几番资料的查找,发现是应用签名的问题,解决办法如下: 1.    进入微信官网的开放平台--->资源中心---->资源下载----& ...