会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132390个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程和并发编程(旧) 36407楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 36408楼
JAVA 全系列/(旧的隐藏)第十一阶段:spring全家桶(Spring Boot)/Spring Boot 36414楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 36415楼
JAVA 全系列/(旧的隐藏)第十四阶段:分布式事务LCN/分布式事务LCN 36416楼

public class Teest {
    //普通代码块
    {
        System.out.println("blockA");
    }
    //静态代码块
    static {
        System.out.println("blockB");
    }
 
    public static void main(String [] args) {
    
    }
}

运行结果:

1566457048930098.png

问题1:静态代码块执行,实在main方法压入栈后执行,还是压入栈前执行?JVM首先将程序文件加载到方法区;加载这个静态(static修饰)代码块时,就直接打印"blockB";还是把程序加载好后,把main方法压入栈中,在执行打印"blockB";能給详细描述一下这个过程吗?

问题2:运行结束后,堆里面有没有Teest这个类的对象?



public class Teest {
 //普通代码块
    {
        System.out.println("blockA");
    }
    //静态代码块
    static {
        System.out.println("blockB");
    }
    public static Teest t1=new Teest();
    
    public static void main(String [] args) {
    }
}

image.png

问题1:上面代码运行后,此时方法区有一个静态变量t1,它的地址指向Teest()建立好的堆中的对象; 有点别扭,main方法中没有任何东西,在类里建立对象;也是在加载方法区时进行吗?

public class Teest {
 //普通代码块
    {
        System.out.println("blockA");
    }
    //静态代码块
    static {
        System.out.println("blockB");
    }
    public static Teest t1=new Teest();
    
    public static void main(String [] args) {
     Teest t1=new Teest();
    }
}

运行结果:

image.png问题:main函数中执行Teest t1=new Teest();又是什么时候执行的,每一次打印的时间关系与main函数的时间关系 是什么样的,麻烦老师给详细解释一下;


JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 36417楼
Python 全系列/第一阶段:Python入门/Python入门(动画版) 36418楼

一、跟着老师敲的代码运行出来浏览器没有响应

package com.bjsxt.server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;



public class Server3 {
	public static void main(String[] args) {
		String CRLF="/r/n";
		String BLANK=" ";
		//(1)创建ServerSocket对象
		ServerSocket server=null;
		//(2)监听是否有客户端发来请求连接
		Socket client = null;
		InputStream is = null;
		
		try {
			
			server = new ServerSocket(8888);
			client = server.accept();
			//获取来自浏览器的请求信息
			is = client.getInputStream();
			byte []buf = new byte[20480];
			int len=0;
			len = is.read(buf);
			System.out.println(new String(buf,0,len));
			/**
			 * 对web浏览器做出响应信息
			 */
			StringBuilder sb = new StringBuilder();
			StringBuilder sbContent = new StringBuilder();//响应的文本
			sbContent.append("<html><head><title>响应结果</title></head>");
			sbContent.append("<body>登陆成功</body></html>");
			//(1)拼接响应头
			sb.append("HTTP/1.1").append(BLANK).append(200).append(BLANK).append("OK");
			sb.append(CRLF);//换行
			sb.append("Content-Type:text/html; charset=utf-8");
			sb.append(CRLF);//换行
			sb.append("Content-Length:").append(sbContent.toString().getBytes().length).append(CRLF);
			sb.append(CRLF);//换行,代表响应头与响应正文之间的空行
			sb.append(sbContent);
			
			
			//通过流输出
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"GBK"));
			bw.write(sb.toString());
			bw.flush();
			bw.close();
			
			 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
		//(6)关闭流
		try {
			IOClose.CloseAll(is,client,server);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
	}
}

二、html代码

<html>
	<head>
		<title>我的第一个html</title>
	</head>
	<body>
		<h1>Hello World</h1>
		<form action="http://localhost:8888/index.html" method="post">
			<p>用户名:<input type="text" id="uname" name="username"</p>
			<p>密码:<input type="password" id="pwd" name="password"></p>
			<p><input type="submit" value="登陆"/></p>
		</form>
	</body>
</html>


三、运行截图

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 36420楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637