【java】声明变量赋值为null和不赋值有没有区别

比如下面这段代码:
public class A {
A a;
}

public class A {
A a = null;
}
这两种写法有没有区别

4个回答

成员变量的话要看有没有用final修饰。

如果没有被final成员变量不需要显式的赋值,因为它会有一个初始化的过程,初始化会赋为默认值。
就像你上面代码中的那样,并没有什么区别。

如果被final修饰,(即常量)则必须声明时就进行赋值,否则编译报错。因为常量是不能被修改的,所以这一点应该很好理解。

如果是局部变量则必须显式的赋值,否则编译报错,因为它没有初始化的过程。
这里是必须显式的赋值,不是声明时就进行赋值,注意和常量的区别。

u010528826
Mr-Yao 回复??333: 要是能帮到你,麻烦采纳一下。谢谢
大约 3 年之前 回复
qq_37078792
haoge333 明白了,谢谢
大约 3 年之前 回复
liu270335264
liu270335264 不错,不错!有final与无final,成员变量与局部变量!
大约 3 年之前 回复

在全局变量没啥区别,局部变量有问题。

你应该去了解下 java 的类初始化过程。
初始化过程中,JVM 会默认将成员变量赋值,
引用类型为 null
即 a 赋值为 null

如果是定义引用数据类型的变量 , 那么会自动初始化为null

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java当中为什么有的变量声明而不赋值
java当中为什么有的变量声明而不赋值,比如 int a;那它和int a = null;有啥区别
io流变量在new前,为什额还需要赋值为null。
fileinputstream in=null; try{ in=new fileinputstream(f); }catch{ }finally{ if(in!=null) in.close(); } 定义变量in时,为什么还需要赋值为null; 这里的概念不太清楚。 又想起了,有些时候定义的基本类型的变量,eclipse也提示需要赋一个初始值,
C# foreach 给迭代变量赋值
如题: 当迭代变量类型是Datarow时,给迭代变量赋值不报错。 当迭代变量类型是String时,给迭代变量赋值报错。错误 1 “item”是一个“foreach 迭代变量”,无法为它赋值 c:\users\netp_cai\documents\visual studio 2010\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs 28 21 ConsoleApplication2 这是为什么呢,另外给Datarow类型的变量item赋值以后,为什么Datarow类型的对象drs就可以取值用呢 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { unsafe { string[] arr = { "xxx1", "xxxx1", "xxxx2", "xxxx3" }; DataRow[] drs = new DataRow[1]; foreach (DataRow item in drs) { item[0] = null; //item = item + "xxx"; } foreach (string item in arr) { item = item + "xxx"; } Console.ReadKey(); } } } }
(java坦克大战游戏开发问题)在构造函数里面无法给成员变量赋值
是这样的,我在做坦克大战的这个小游戏,在传递tankclient的对象tc时候,可以传进tank这个构造方法里面,也可以在这个构造函数里面成功的赋值给tank (this)类里面的的tankclient tc这个成员变量,但是呢,一旦在这个构造函数外的一些方法里面调用这个成员变量,就会显示为null 导致我传入子弹类的时候 爆空指针错误,但是我很不解,为什么会为空?不能这样赋值吗~? 报错信息: ![报错信息](https://img-ask.csdn.net/upload/201609/03/1472878828_434550.png) 监听器方法: ![监听器方法](https://img-ask.csdn.net/upload/201609/03/1472879082_538544.png) tank构造函数: ![tank构造函数](https://img-ask.csdn.net/upload/201609/03/1472879120_916961.png) 开火方法: ![开火方法](https://img-ask.csdn.net/upload/201609/03/1472879167_780532.png) 谢谢各位大大了~!
关于php 变量null 的问题
我这一段时间在学习Php 学到Null的时候,不是很明白,对一个变量赋值Null,那它会分配一个内存空间吗
一个方法中的字符串局部变量无论如何赋值都为始终为null
``` public String excuteTempSql(String sql_temp){ String front_id_string="12"; conn = DBUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql_temp); while (rs.next()) { front_id_string = front_id_string+rs.getInt("room_id")+","; } front_id_string= front_id_string.substring(0, front_id_string.length()-1 ); } catch (SQLException e) { e.printStackTrace(); } System.out.println(front_id_string); return front_id_string; } ``` 为什么front_id_string赋值为“12”了(无论什么赋值),但是单点调试的时候显示为null。高层传到底层的sql_temp为查询语句。
Java传递参数无法赋值
为什么这样无法给pointer赋值,我debug看变量g.adjList[i}.firstedge明明不为null,但是整个循环下来pointer一直都是null,没有赋值成功请问这个什么回事? Graph是我定义的图的数据结构.firstedge的类型也是EdgeNode public static void showAll(Graph g) { for (int i = 1;i<= g.numVertexs ; i++) { 'EdgeNode pointer = g.adjList[i].firstedge;' while(pointer != null) { //.... pointer = pointer.next; } } }
Java如何通过匿名内部类给外部变量赋值
import java.awt.*; import javax.swing.*; import javax.swing.border.*; import java.awt.event.*; import java.lang.Math; public class GuessWindow extends JFrame //implements ActionListener { GuessWindow() { JFrame win=new JFrame("猜数字小游戏"); setLocation(200, 200); setSize(250, 250); win.validate(); win.setVisible(true); GridLayout grid = new GridLayout(2,2,25,15); JPanel p = new JPanel(grid); p.add(new JLabel("获取[1,10)之间的随机数:")); JButton button =new JButton("得到一个随机数"); p.add(button); p.add(new JLabel("请输入您的猜测:")); JTextField guess = new JTextField(20); p.add(guess); Box bb,p1,p2; bb=Box.createVerticalBox(); p1=Box.createHorizontalBox(); bb.add(p); p1.add(new JLabel("单击确定按钮")); p1.add(Box.createHorizontalStrut(10)); JButton queding =new JButton("确定"); p1.add(queding); bb.add(p1); win.add(bb,BorderLayout.CENTER); JLabel result =new JLabel("无反馈信息"); result.setForeground(Color.blue); win.add(result,BorderLayout.SOUTH); int da=0; int guessa=0; String a = null; button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int da=0; da=(int)(1+Math.random()*(10-1)); } }); queding.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int guessa=0; String a = null; a=guess.getText(); guessa=a.charAt(0); if (guessa == da) { JLabel resultr=new JLabel("猜测正确"); resultr.setForeground(Color.blue); win.add(resultr,BorderLayout.SOUTH); }else if(guessa<da) { JLabel resultx=new JLabel("猜小了"); resultx.setForeground(Color.blue); win.add(resultx,BorderLayout.SOUTH); }else { JLabel resultd=new JLabel("猜大了"); resultd.setForeground(Color.blue); win.add(resultd,BorderLayout.SOUTH); }; } }); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new GuessWindow(); } }
js全局变量的赋值和使用
var myArray = {}; var cpuNumMax = 1; var cpuNumMin = 1; function getVMProductByTypeMap(){ $.ajax({ url:"<%= request.getContextPath()%>/service/selfservice/getProductByTypeMap", type:"post", dataType:"json", data:{"typeId":"1"}, cache: false, asycn:false, success: function (data) { if(data != null && data != ""){ alert(data[0].cpuNumMax);////查到的值是32 cpuNumMax = parseInt(data[0].cpuNumMax); cpuNumMin = parseInt(data[0].cpuNumMin); for(var i=0; i<data.length; i++){ var memMax = data[i].memMax; var memMin = data[i].memMin; var cpuNum = data[i].cpuNum; myArray[cpuNum] = memMin+"|"+memMax; } } return resultFlag; //console.log(myArray); }, error:function(){ alert("error"); } }); } $(document).ready(function(){ getVMProductByTypeMap(); console.log(cpuNumMax); //1 }); ajax中我已使用了同步,但 为什么console.log(cpuNumMax); 输出是1,就是ajax中没有为其赋值 ?
如果将变量的初始化分为分配内存空间和赋值两个过程,一个类的初始化的顺序是怎样的
看到有一本书中说,(当一个类里只有非静态变量)非静态变量先分配内存空间,此时它的值 是null,赋值的语句会提取到构造函数中执行。 那么,一个类里有静态变量,静态代码块,非静态变量,非静态代码块和构造函数时,按照 分配内存空间和赋值两个过程,初始化的过程究竟是怎样的呢?
关与weblogic的,有哪位高手知道怎么在weblogic启动时给变量赋值,以及怎么来得到这个变量
<p>我在weblogic 里面设置了启动类,在启动类里面给一些变量赋了值,但是当我引用这些变量的时候为什么就没的值啊?<br>这是启动类,我是给ConnectionManager.type这个静态的变量在启动时赋了个值<br>public class WLsT3Startup implements T3StartupDef {<br> public String startup(String arg0, Hashtable arg1) throws Exception {<br>  ConnectionManager.type="dao-type";<br>  System.out.println("::::::type::::::::"+ConnectionManager.type);<br> }<br> <br> public void setServices(T3ServicesDef arg0) {<br>   <br> }<br>}<br>在weblogic控制台也有输出:::::::type::::::::dao-type</p> <p> </p> <p>但是我这样写的时候</p> <p>public class Test {<br> public static void main(String[] args) {<br>  System.out.println(ConnectionManager.type);<br> }<br>}</p> <p>就输出个null呢?</p> <p> </p> <p>有哪位高手知道怎么在weblogic启动时给变量赋值,以及怎么来得到这个变量的值啊?</p><br /><strong>问题补充:</strong><br /><span style="color: red">我是想在weblogic启动的时候初始化一些变量的值,但是weblogic启动之后,我在去输出的时候就为null了</span>
求助:Object[][] 类型变量赋值问题
在java中使用sql查询语句的结果想用表格表示出来,把表格内容值存储在Object[][] data中,但是一般赋值语句会出现问题,求问应该用哪种方法赋值? 代码如下: ``` Object[][] data = null;// 数据 while (rs.next()) { res = res + rs.getString("num") + rs.getString("class") + rs.getString("name") +rs.getString("f") + rs.getString("age") + rs.getString("addr")+ rs.getString("sex"); System.out.println("查询结果:"+res); // data[n][] = {rs.getString("num"),rs.getString("class"),rs.getString("name"), // rs.getString("f"),rs.getString("age"),rs.getString("addr"), // rs.getString("sex")}; data[n][0] = rs.getString("num"); data[n][1] = rs.getString("class"); data[n][2] = rs.getString("name"); data[n][3] = rs.getString("f"); data[n][4] = rs.getString("age"); data[n][5] = rs.getString("addr"); data[n][6] = rs.getString("sex"); n++; for (int i=0;i<7;i++) System.out.println(data[n][i]); } ```
结构体指针成员变量在赋值后被篡改了是怎么回事?
结构体指针地址没变,值被篡改了什么情况,有没有大神知道啊 // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" #include "string.h" using namespace std; struct STU_LIST { char name[40]; int num; char sex[4]; int clas; struct STU_LIST *nex; }; /******************************************************************************************************************/ /*------------------------------------ -----数字提取------------ ---------------------------------------------*/ /******************************************************************************************************************/ int strEint(const char *str) { int len = strlen(str),i,num; char *tepnum,*tep; tepnum = new char[40]; tep=tepnum; i=len-1; *(tepnum+len) = '\0'; while (i>=0) { if (*(str+i)>='0'&&*(str+i)<='9') { *(tepnum+i)=*(str+i); } else { tepnum=tepnum+i+1; i=0; } i--; } num = atoi(tepnum); delete[] tep; return num; } struct STU_LIST *STU_insirt(struct STU_LIST *head,int n); struct STU_LIST *PRESENT_class; /******************************************************************************************************************/ /*------------------------------------ -----主程序------------ -------------------------------------------------*/ /******************************************************************************************************************/ int _tmain(int argc, _TCHAR* argv[]) { char *comad; int lep = -1; bool state = true,create_sign = false; comad = new char; cout<<"欢迎使用学生名单录入工具,请输入命令命令进行操作。\n输入help查询可用命令。"<<endl; PRESENT_class = new struct STU_LIST; PRESENT_class->clas = 10; PRESENT_class->num = 0; PRESENT_class->nex = NULL; while (state) { cin>>comad; int nums; struct STU_LIST *temp; nums = strEint(comad); if (nums <= 0) { cout<<"您的操作命令缺少有效参数或参数类型有误!!!"<<endl; cout<<"您可以输入help来查询可用操作命令,及使用格式和方法。"<<endl; } else { if(PRESENT_class != NULL) { temp = STU_insirt(PRESENT_class,nums); cout<<"temp->nex->"<<static_cast<const void *>(temp->nex)<<endl; cout<<"temp->nex->num->"<<static_cast<const void *>(&temp->nex->num)<<endl; cout<<temp->clas<<"班"<<temp->name<<"的信息记录已添加。"<<endl; if (temp->nex == NULL) { cout<<"本节点是尾结点"<<endl; } else { cout<<"头节点的学号是"<<temp->num<<endl; cout<<"第二个节点的学号是"<<temp->nex->num<<endl; } } else { cout<<"您要往哪个班级添加学生信息,请在添加信息前先选择一个班级的登记表。"<<endl; cout<<"您可以输入help来查询可用操作命令,及使用格式和方法。"<<endl; } } if (strstr(comad,"exit")!=NULL) { state = false; } } return 0; } /******************************************************************************************************************/ /*-----------------------------------------插入学生条目-----------------------------------------------------------*/ /******************************************************************************************************************/ struct STU_LIST *STU_insirt(struct STU_LIST *head,int n) { struct STU_LIST *temp,*stp1,*lastsp; temp = head; lastsp = NULL; bool sign = true; while (sign) { cout<<"当前节点学号是"<<temp->num<<endl; if(temp->num >= n) //假如要插入的学号不大于当前节点学号 { if(temp->num > n ) //假如要插入的学号小于当前节点学号,那么在当前节点前面创建新节点并录入学生数据 { stp1=(struct STU_LIST*) alloca(sizeof(struct STU_LIST)); stp1->num = n; stp1->clas = head->clas; cout<<"请输入学生姓名:"; cin >>stp1->name; cout<<"请输入学生性别:"; cin >>stp1->sex; stp1->nex = temp; if(temp == head ) //假如当前节点是头结点,那么设置新节点为表头 { head = stp1; sign = false; } else //假如当前节点不是头结点,将上一个节点的指针指向新节点,跳出循环结束命令 { lastsp->nex = stp1; sign = false; } } else //假如要插入的学号等于当前节点学号,那么更新该节点学生数据。 { cout<<"请输入学生姓名:"; cin >>temp->name; cout<<"请输入学生性别:"; cin >>temp->sex; sign = false; } } else //假如要插入的学号大于当前节点学号 { cout<<"要插入的节点大于当前节点"<<endl; if(temp->num == 0) //假如当前节点学号等于0,意味着当前节点没有录入过数据,那么将本节点作为插入的节点录入学生数据。 { temp->num = n; cout<<"请输入学生姓名:"; cin >>temp->name; cout<<"请输入学生性别:"; cin >>temp->sex; temp->nex = NULL; sign = false; } else //假如当前节点的学号不等于0。 { if(temp->nex == NULL) //假如当前节点是尾结点,那么在当前节点之后创建新节点 { stp1 = (struct STU_LIST*) alloca(sizeof(struct STU_LIST)); cout<<"stp1 -> "<<static_cast<const void *>(stp1)<<endl; stp1->num = n; cout<<"新节点的学号是"<<stp1->num<<endl; stp1->clas = head->clas; stp1->nex = NULL; cout<<"请输入学生姓名:"; cin >>stp1->name; cout<<"请输入学生性别:"; cin >>stp1->sex; temp->nex = stp1; cout<<"temp->nex->num="<<temp->nex->num<<endl; cout<<"temp->nex->num->"<<static_cast<const void *>(&temp->nex->num)<<endl; sign = false; } else //假如当前节点不是尾结点,那么将当前节点设置为下个节点 { lastsp = temp; temp = temp->nex; } } } } if(head->nex != NULL) { cout<<"head->nex->num="<<head->nex->num<<endl; cout<<"head->nex->num->"<<static_cast<const void *>(&head->nex->num)<<endl; } return head; } ![图片说明](https://img-ask.csdn.net/upload/201912/28/1577541877_870062.png) 在函数内部时候值不变,一出函数内存里的值就变了这是什么道理。
使用了未赋值的局部变量。。。可是我明明赋值了呀。。
代码: ``` string content = AllFunctions.streamToString(stream, Encoding.UTF8); Regex regex = new Regex("\\/song\\?id=[0-9]{5,8}"); //歌曲id if (!regex.IsMatch(content)) { return; } allurls = regex.Matches(content); //所有匹配项 random = new Random(Guid.NewGuid().GetHashCode()); //随机数 index = random.Next(allurls.Count); // listUrl = "http://music.163.com" + allurls[index]; string songID = allurls[index].Value.Split('=')[1]; //在这里赋值的啊! musicUrl = "http://music.163.com/api/song/detail/?id=" + songID + "&ids=%5B" + songID + "%5D?csrf_token=" + csrf_token; //在这里使用就没有错误!! getPlaySite: stream = AllFunctions.getOrPostUrl(musicUrl, 0, "", cookie, out outCookie, header, out outHeader, false, null, 0); //获取歌曲播放链接 content = AllFunctions.streamToString(stream, Encoding.UTF8); string mp3Url = "", songDuration = ""; try { /// } catch { return; } musicUrl = "http://music.163.com/api/log/web?csrf_token=" + csrf_token; //播放开始和结束的时候需要post的链接 postData = "action=play&json={\"id\":\"" + songID + "\",\"type\":\"song\"}"; ``` 最后一句的时候,提示我songID没赋值,无法编译? 我明明在最前面赋值的了啊,而且前面使用都没有错误,最后一句就说没赋值?? 第一次发帖,希望大家帮帮我,谢谢
oracel nvarchar2不能赋值?!
我的存储过程中 设定一个变量为nvarchar2 (c_account)目的是这个参数是可能会带中文 c_account 账号名称 现在是 c_account 无论是into 赋值还是 :=赋值后 都还是位null 不知何原因.. 求解答。。。
求sql分页利用java的变量的代码
public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ creatFile(fn, FILE_NAME); Class.forName("com.mysql.jdbc.Driver"); System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); System.out.println(" 实例化Statement对象..."); stmt = conn.createStatement(); int sunNum = 30; int pagesize = 0; pagesize = sunNum/2; for(int i=0;i<=pagesize;i++) { String sql = "SELECT ID,name, url From websites limit i*2,2;"; ResultSet rs = stmt.executeQuery(sql); String fn = "F://NEWtest//again4.txt"; wf(fn,"ID,name,url."); while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); //String country = rs.getString("country"); //String fourth = rs.getString("fourth"); System.out.print(", FR: " + id); System.out.print(", SE: " + name); System.out.print(", TH: " + url); //System.out.print(", FO: " + country); System.out.print("\n"); wf(fn,id+ name + url ); } rs.close(); stmt.close(); conn.close();} 看看我的代码对不,想利用循环分页,目前不知道怎么样把java的变量赋值给sql,帮忙解决一下,写个代码出来吧,我刚学java不到一个星期,谢谢。
MFC窗口调用DestroyWindow()以后,窗体对应的cpp内的变量中的赋值在下次加载该窗口时依然存在
该问题的窗体由父窗口mainWindow和子窗口childWindow组成。 其中mainWindow、childWindow窗口在工程文件中对应的文件分别为 mainWindow.h mainWindow.cpp(父窗口) childWindow.h childWindow.cpp(子窗口) 其中子窗口由VS窗口向导创建。 在父窗口中按下按钮,子窗口显示,按下子窗口中按钮,赋值然后子窗口关闭,已经确定 子窗口OnClose()时调用DestroyWindow()并且在PostNcDestroy()确认其hWnd已经=NULL 以下是调用代码。 ``` //父窗口调用子窗口代码如下(mainWindow.cpp) #include childWindow.h; //某个方法中 { childWindow childWindowDlg; childWindowDlg.DoModal(); } //子窗口变量赋值代码如下(childWindow.cpp) vector<CString> shipcode; //然后在某个方法中 { int shipSize = shipcode.size(); //然后这里就是问题所在了,第一次启动该窗口时执行该方法时shipSize为0,将此vector赋值以后(如添加了3个"a""b""c");然后将窗口关闭并且确认调用了DestroyWindow()以后,在父窗口中的子窗口窗口调用代码(就是上面的父窗口的代码)再次被调用然后子窗口创建完成后,再次执行此子窗口的方法,发现shipSize为3也就是上一次子窗口被关闭前该变量被赋的值。 } ``` 请问大家该问题怎么解决,我想每次启动子窗口shipSize都为0,本人MFC学习不多,临时需求要写。因为需求关系不能使用QT,希望大家帮帮忙呀。
程序中定义的全局变量,list 在input中已经赋值,为什么print函数中List=null?
#include<stdio.h> #include<stdlib.h> #define N 4 struct node{ int score; struct node*link; }; struct node node; struct node*list,*p,*r,*q; void input(struct node*list) { int i; int ch; for(i=0;i<N;i++) { printf("please input the score of %d\t",i+1); p=(struct node*)malloc(sizeof(struct node*)); scanf("%d",&p->score); p->link=NULL; if(list==NULL) list=p; else r->link=p; r=p; printf("数据为%d",p->score); } } void average(struct node*list) { int s=0,i; double average2; if(list==NULL) printf("链表为空"); for(i=0;i<N;i++) { s+=list->score; list=list->link; } average2=(double)s/N; printf("%f",average2); } void print(struct node*list) { int i; printf("顺利进入"); if(list==NULL) printf("这是空链表"); else { q=list; while(q->link!=NULL) { printf("%d",q->score); q=q->link; } }} int main() { void input(struct node*list); void average(struct node*list); void print(struct node*list); int ah; system("cls"); while(1){ printf("链表操作系统:"); printf("\n1.建立链表\n2.输出数据\n3.求平均数\n"); scanf("%d",&ah); switch(ah){ case 1:input(list);break; case 2:print(list);break; case 3:average(list);break; default:printf("wrong!");break; }}}
关于java static变量初始化的疑问
java中,类的static变量作为类变量,只需要被一次初始化,就可使用,但是,我在程序中遇到一个问题: 在web.xml中配置listener,服务器启动时,ServletContextListen初始化数据源(DataSource),第一次初始化成功,但是在Test类中,调用ConnectionManager.getConnection()时,DataSource却为null,意味着ServletContextListen初始化数据源失败了,大家帮忙解答下,到底什么原因造成的,谢谢!!! 以下是代码: [code="java"] package c3p0.connection; import java.beans.PropertyVetoException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class ConnectionManager { private static DataSource data_source=null;; private static Properties props=null; private static String porps_name=null; /** * 创建数据库连接池 * @return */ private static DataSource createDataSource(){ load(); data_source=initDB(); return data_source; } /** * 加载配置文件 */ private static void load(){ try { props = new Properties(); InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream(porps_name); props.load(in); } catch (IOException e) { e.printStackTrace(); } } /** * 初始化数据库 */ private static DataSource initDB(){ System.out.println("开始初始化数据源..."); ComboPooledDataSource pool_ds=new ComboPooledDataSource(); try { pool_ds.setDriverClass(getProperty("c3p0.connection.driverClass")); } catch (PropertyVetoException e) { e.printStackTrace(); throw new RuntimeException("数据库驱动加载失败"); } pool_ds.setJdbcUrl(getProperty("c3p0.connection.url")); pool_ds.setUser(getProperty("c3p0.connection.user")); pool_ds.setPassword(getProperty("c3p0.connection.password")); pool_ds.setInitialPoolSize(Integer.parseInt(getProperty("c3p0.connection.initialPoolSize"))); pool_ds.setMaxPoolSize(Integer.parseInt(getProperty("c3p0.connection.maxPoolSize"))); pool_ds.setMinPoolSize(Integer.parseInt(getProperty("c3p0.connection.minPoolSize"))); pool_ds.setMaxIdleTime(Integer.parseInt(getProperty("c3p0.connection.maxIdleTime"))); pool_ds.setAcquireIncrement(Integer.parseInt(getProperty("c3p0.connection.acquireIncrement"))); pool_ds.setAcquireRetryAttempts(Integer.parseInt(getProperty("c3p0.connection.acquireRetryAttempts"))); pool_ds.setAcquireRetryDelay(Integer.parseInt(getProperty("c3p0.connection.acquireRetryDelay"))); pool_ds.setTestConnectionOnCheckout(Boolean.parseBoolean(getProperty("c3p0.connection.testConnectionOnCheckout"))); pool_ds.setTestConnectionOnCheckin(Boolean.parseBoolean(getProperty("c3p0.connection.testConnectionOnCheckin"))); pool_ds.setIdleConnectionTestPeriod(Integer.parseInt(getProperty("c3p0.connection.idleConnectionTestPeriod"))); pool_ds.setCheckoutTimeout(Integer.parseInt(getProperty("c3p0.connection.checkoutTimeout"))); pool_ds.setAutomaticTestTable(getProperty("c3p0.connection.automaticTestTable")); System.out.println("数据源初始化完毕..."); return pool_ds; } /** * 获取c3p0连接池文件配置信息 * @param key * @return */ private static String getProperty(String key){ if(key==null||"".equals(key)){ throw new NullPointerException("key不能为空!!!请检查key的赋值!!!"); } return props.getProperty(key); } public static Connection getConnection() throws SQLException{ data_source=(data_source==null) ? createDataSource() : data_source; return data_source.getConnection(); } public static void start(String porps_name) throws SQLException{ ConnectionManager.porps_name=porps_name; Connection conn=getConnection(); conn.close(); } public static void stop(){ data_source=null; } public static void release(Connection conn,PreparedStatement pstmt,ResultSet res){ try { if(conn!=null){ conn.close(); } if(pstmt!=null){ pstmt.close(); } if(res!=null){ res.close(); } } catch (SQLException e) { e.printStackTrace(); } } } [/code] [code="java"] package mystruts.listener; import java.sql.SQLException; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import c3p0.connection.ConnectionManager; /** * ServletContext 上下文监听器 * 应用服务器一启动就产生该对象,服务器关闭即销毁 * 作用于全局,所有Servlet ,相当于静态变量 * @author tianly * */ public class ServletContextListen implements ServletContextListener { /** * web服务器关闭时执行 */ @Override public void contextDestroyed(ServletContextEvent event) { /** * 关闭数据源 */ ConnectionManager.stop(); } /** * web服务器启动时执行 */ @Override public void contextInitialized(ServletContextEvent event) { /** * 初始化数据源 */ String db_url=event.getServletContext().getInitParameter("DataBaseConfig"); try { ConnectionManager.start(db_url); } catch (SQLException e) { e.printStackTrace(); } } } [/code] [code="java"] package test.c3p0; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import c3p0.connection.ConnectionManager; import c3p0.util.DateUtil; public class Test { /** * @param args */ public static void main(String[] args) { String currdate=DateUtil.getDateTime(); Connection conn=null; PreparedStatement pstmt=null; ResultSet res=null; try { String sql="insert into userinfo(username,password,sex,regdate) values(?,?,?,?)"; String sql4ID="select LAST_INSERT_ID()"; conn=ConnectionManager.getConnection(); conn.setAutoCommit(false); pstmt=conn.prepareStatement(sql); pstmt.setString(1, "tly"); pstmt.setString(2, "tly"); pstmt.setInt(3, 0); pstmt.setString(4, currdate); //mysql中无需进行日期格式转换 pstmt.executeUpdate(); pstmt=conn.prepareStatement(sql4ID); res=pstmt.executeQuery(); if(res.next()){ int ID=res.getInt(1); System.out.println("ID:"+ID); } conn.commit(); } catch (SQLException e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } }finally{ ConnectionManager.release(conn, pstmt, res); } } } [/code] [code="xml"] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>mysystem</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 登录Servlet配置 <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>login.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> --> <filter> <filter-name>ActionDispatcher</filter-name> <filter-class> mystruts.actionfilter.ActionDispatcher</filter-class> </filter> <filter-mapping> <filter-name>ActionDispatcher</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <!-- 数据库信息配置 --> <context-param> <param-name>DataBaseConfig</param-name> <param-value>c3p0/c3p0.properties</param-value> </context-param> <listener> <listener-class>mystruts.listener.ServletContextListen</listener-class> </listener> </web-app> [/code] 在Test类中,调用ConnectionManager.getConnection()时,DataSource却为null,但我在debug时,跟踪查看,发现DataSource是被初始化了,不知什么原因造成初始化失败,请大家帮忙查看下,谢谢
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问