java序列化不能序列化static变量吗?为什么?能不能举个例子

java序列化不能序列化static变量吗?为什么?能不能举个例子

3个回答

static成员不属于对象实例,没办法序列化。因为没办法,就不举例了。

csliker
csliker 那如果在一个代码里加入了Class.static变量=new value,再序列化,然后调用obj.static变量,则取出来的为什么是新的值呢?你试试
5 年多之前 回复

你是怎么“序列化”的?如果你自己反射,并且将静态属性的变量存下来,再恢复,这个当然会改变的。但是直接对对象实例序列化是不包括静态成员的。

csliker
csliker 大概明白了,我再想想
5 年多之前 回复

支持2楼解释。。。。。。。。。。。。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
序列化static变量问题

public class User implements Serializable { private static final long serialVersionUID = 4403512922350207270L; private String name; private int age; private Date birthday; static int count = 1 ; private transient String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "User{" + "name=" + name + ", age=" + age + ", gender=" + gender + ", birthday=" + birthday + ",count=" +count + '}'; } } 测试序列化 public class Test { public static void main(String[] args) { User user = new User(); user.setName("hollis"); user.setGender("male"); user.setAge(23); user.setBirthday(new Date()); System.out.println(user); //Write Obj to File ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream("D:/tempFile.txt")); oos.writeObject(user); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(oos); } } } 输出内容为User{name=hollis, age=23, gender=male, birthday=Thu Jun 16 15:59:10 CST 2016,count=1} 测试反序列化 public class Test1 { public static void main(String[] args) { //Read Obj from File File file = new File("D:/tempFile.txt"); ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream(file)); User newUser = (User) ois.readObject(); System.out.println(newUser); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(ois); try { FileUtils.forceDelete(file); } catch (IOException e) { e.printStackTrace(); } } } } 输出内容为User{name=hollis, age=23, gender=null, birthday=Thu Jun 16 15:59:10 CST 2016,count=1} 不是说static变量不能被序列化吗,为什么反序列化的时候还能把count读出来

Java 如何序列化接口实例

接口变量如何序列化? 现有一个内部接口如下 [code="java"] public interface GetDataInterface<K> extends Serializable { public Object getData(K key); } [/code] new接口的变量并序列化如下 [code="java"] GetDataInterface<String> getData = new GetDataInterface<String>() { private static final long serialVersionUID = 1L; @Override public Object getData(String key) { return null; } }; ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("a.obj")); out.writeObject(getData); out.close(); [/code] 始终报ioexception如下 [code="xml"] IOException java.io.NotSerializableException: [java.io.ObjectOutputStream.writeObject0(Unknown Source), java.io.ObjectOutputStream.defaultWriteFields(Unknown Source), java.io.ObjectOutputStream.writeSerialData(Unknown Source), java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source), java.io.ObjectOutputStream.writeObject0(Unknown Source), java.io.ObjectOutputStream.writeObject(Unknown Source)] [/code] 如果建一个类继承自GetDataInterface再实例化该类的变量进行序列化不会出现问题,问下是不是像上面的接口变量无法进行序列化,有没有办法进行序列化(不新建类继承接口)

使用fastJson或者jprotobuf还需要加serialVersionUID吗

对象里还需要在显示加上serialVersionUID吗? 另外:他们会序列化static 变量吗?

Java编译能通过,但是运行的时候提示有错误

<p>Java编译能通过,但是运行的时候提示有错误。</p> <p>提示出现这样的错误:</p> <p> </p> <pre name="code" class="java">Exception in thread "main" java.lang.ExceptionInInitializerError at org.idea.ok.Person.main(Person.java:32) Caused by: java.lang.NullPointerException at org.idea.ok.Gender1.&lt;init&gt;(Gender1.java:28) at org.idea.ok.Gender1.&lt;clinit&gt;(Gender1.java:17) ... 1 more</pre> <p> 原程序如下:</p> <pre name="code" class="Gender1">package org.idea.ok; /* *枚举类 *既可以通过public访问权限的静态常量来访问实例; *也可以通过Gender1类的getInstance静态方法来访问实例变量。 */ import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.NoSuchElementException; import java.util.Map; import java.util.HashMap; public class Gender1 implements Serializable { public static final Gender1 FEMALE = new Gender1(new Character('F'), "FEMALE"); public static final Gender1 MALE = new Gender1(new Character('M'), "MALE"); private final Character sex; private final transient String description; private static Map&lt;Character, Gender1&gt; instancesBySex = new HashMap&lt;Character, Gender1&gt;(); private Gender1(Character sex, String description) { this.sex = sex; this.description = description; instancesBySex.put(sex, this); } public Character getSex() { return sex; } public String getDescription() { return description; } public static Collection getAllValues() { return Collections.unmodifiableCollection(instancesBySex.values()); } public static Gender1 getInstance(Character sex) { /*按照参数指定的性别缩写查找Gender1实例*/ Gender1 result = (Gender1)instancesBySex.get(sex); if (result == null) { throw new NoSuchElementException(sex.toString()); } return result; } public String toString() { return description; } private Object readResolve() { /*保证反序列化时直接返回Gender1类包含的静态实例*/ return getInstance(sex); } }</pre>   <pre name="code" class="java">package org.idea.ok; /* */ public class Person { private String name; private Gender1 gender; public Person(String name, Gender1 gender) { this.name = name; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Gender1 getGender() { return gender; } public void setGender(Gender1 gender) { this.gender = gender; } public static void main(String[] args) { Person mary = new Person("Mary", Gender1.FEMALE); System.out.println("name = " + mary.getName() + "\t" + "gender = " + mary.getGender()); } }</pre> <p> 程序异常提示是:初始化的时候错误;但是造成这种异常的根源是Gender1中的代码的问题。这个我还真是找不出来了,麻烦谁能找出来的,小弟不胜感谢。</p>

java读取xml,将读到的数据存放到对象中,再按照一定条件写入xml,从而生成动态菜单

做eclipse插件开发,菜单项的配置是在plugin.xml中是写死的,现在想做成动态菜单的形式。中间写一个类,这个类可以读取一个xml配置文件,然后可以有一些方法把提取过的数据和plugin.xml联系起来,通过这个类来动态的配置eclipse的菜单。我的想法是把读到的xml文件的内容封装到java的对象中,返回值是一个集合类型,然后我就不知道怎么做了。 图片是展示效果: ![图片说明](https://img-ask.csdn.net/upload/201609/01/1472719954_312637.png) ``` 下面是我们找的一些相关资源: [](http://dom4j.sourceforge.net/dom4j-1.6.1/guide.html "") 这是我自己写的demo: package testforxybc; public class UserInfo { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String password; } package testforxybc; import java.beans.XMLDecoder; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class UserInfoController { public static void main(String args[]) { List<UserInfo> objList = null; try { objList = UserInfoController.objectXMLDecoder("outxml.xml"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } for (UserInfo userInfo : objList) { System.out.println(userInfo.getName()); System.out.println(userInfo.getPassword()); } } public static List<UserInfo> objectXMLDecoder(String objSource) throws FileNotFoundException,IOException,Exception { List<UserInfo> objList = new ArrayList<UserInfo>(); File fin = new File(objSource); FileInputStream fis = new FileInputStream(fin); XMLDecoder decoder = new XMLDecoder(fis); Object obj = null; try { while( (obj = decoder.readObject()) != null) { objList.add((UserInfo) obj); } } catch (Exception e) { // TODO Auto-generated catch block } fis.close(); decoder.close(); return objList; } } <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.eclipse.ui.commands"> <category name="Inoherb Category" id="com.uds.inoherb.commands.category"> </category> <command name="法规标准库" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.regulatoryStandards"> </command> <command name="产品标准" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.productStandard"> </command> <command name="禁限用清单" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.prohibitedList"> </command> <command name="全成分" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.fullComposition"> </command> <command name="原料库" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.rawMaterial"> </command> <command name="油脂类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.fadAndOil"> </command> <command name="乳化剂类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.emulsifier"> </command> <command name="香精类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.parfum"> </command> <command name="活性物类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.actives"> </command> </extension> <extension point="org.eclipse.ui.handlers"> <handler commandId="com.uds.inoherb.commands.regulatoryStandards" class="com.uds.inoherb.handlers.SampleHandler"> </handler> <handler commandId="com.uds.inoherb.commands.rawMaterial" class="com.uds.inoherb.handlers.SampleHandler"> </handler> <handler commandId="com.uds.inoherb.commands.productStandard" class="com.uds.inoherb.handlers.SampleHandler"> </handler> <handler commandId="com.uds.inoherb.commands.fadAndOil" class="com.uds.inoherb.handlers.SampleHandler"> </handler> </extension> <extension point="org.eclipse.ui.bindings"> <key commandId="com.uds.inoherb.commands.sampleCommand" contextId="org.eclipse.ui.contexts.window" sequence="M1+6" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"> </key> </extension> <extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"> <menu label="企业电子数据库" id="com.uds.inoherb.menus.sampleMenu"> <menu label="法规标准库" id="com.uds.inoherb.menus.sampleMenu2"> <command commandId="com.uds.inoherb.commands.productStandard" id="com.uds.inoherb.menus.productStandard"> </command> <command commandId="com.uds.inoherb.commands.prohibitedList" id="com.uds.inoherb.menus.prohibitedList"> </command> <command commandId="com.uds.inoherb.commands.fullComposition" id="com.uds.inoherb.menus.fullComposition"> </command> </menu> <menu label="原料库" id="com.uds.inoherb.menus.sampleMenu3"> <command commandId="com.uds.inoherb.commands.fadAndOil" id="com.uds.inoherb.menus.fadAndOil"> </command> <command commandId="com.uds.inoherb.commands.emulsifier" id="com.uds.inoherb.menus.emulsifier"> </command> <command commandId="com.uds.inoherb.commands.parfum" id="com.uds.inoherb.menus.parfum"> </command> <command commandId="com.uds.inoherb.commands.actives" id="com.uds.inoherb.menus.actives"> </command> </menu> </menu> </menuContribution> </extension> </plugin> ```

为什么 CKediter 4.3.2 版本 赋值 有时会失败

> Blockquote .NET web 程序, 我从服务段序列化数据源为json 到某变量 json_Model,在前段 赋值给一 js 对象。然后绑定到 ckediter 容器,打开页面 刷新,查看ckediter赋值情况,有时候就可以,有时候就失败,为什么呢? 备注: 这段代码 是在页面最底部 </body> 之前,前边已经引用了 ckediter 的库文件,请忽略序列化失败问题,因为我尝试了 在某个 div 内同时赋值,是成功的。另外,火狐里边是没问题了。ie8 有问题,时好时坏。 <script> CKEDITOR.disableAutoInline = true; //var editor = CKEDITOR.replace("Description"); var json = {"ContentID":10,"Title":"公司简介","SubTitle":null,"Summary":"公司简介","Description":"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 于绿色建筑和智慧能源的发展,保护资源,保护环境,为合作伙伴和客户创造长期的价值,提供高品质高价值的产品和技术咨  询、技术培训、系统设计及工程实施等服务。新锘威智能科技将始终致力于绿色建筑和智慧能源的发展,保护资源,保护环境,为合作伙伴和客户创造长期的价值,提供高品质高价值的产品和技术咨询、技术培训、系统设计、工程实施等服务。","ImageUrl":null,"ThumbImageUrl":null,"NormalImageUrl":null,"CreatedDate":"\/Date(1389618017463)\/","CreatedUserID":1,"LastEditUserID":1,"LastEditDate":"\/Date(1390578846707)\/","LinkUrl":null,"PvCount":0,"State":true,"ClassID":41,"Keywords":null,"Sequence":0,"IsRecomend":false,"IsHot":true,"IsColor":false,"IsTop":true,"Attachment":null,"Remary":null,"TotalComment":0,"TotalSupport":0,"TotalFav":0,"TotalShare":0,"BeFrom":null,"FileName":null,"Meta_Title":"","Meta_Description":"","Meta_Keywords":"","SeoUrl":"","SeoImageAlt":null,"SeoImageTitle":null,"StaticUrl":null} $(function () { $('#Description').ckeditor(); $('#Description').val(json.Description); });</script>

请教一下,vs2017 为什么我的c++代码定义的没有问题,也没有错误提示,但是一编译就爆出很奇怪的错误

![图片说明](https://img-ask.csdn.net/upload/201906/25/1561469830_889400.png) ![图片说明](https://img-ask.csdn.net/upload/201906/25/1561469845_709794.png) ![图片说明](https://img-ask.csdn.net/upload/201906/25/1561469867_574272.png) ![图片说明](https://img-ask.csdn.net/upload/201906/25/1561469902_498612.png) 以下是完整代码 ``` #include "pch.h" #include<iostream> using namespace std; typedef struct { int weight; BTreeNode *left; BTreeNode *right; }BTreeNode; BTreeNode* CreateHuffman(int a[], int n) { // 根据数组a中n个权值建立一颗哈夫曼树,则返回树根指针 BTreeNode **b, *q; // 动态地分配一个由b指向的指针数组 b = new BTreeNode*[n]; int i, j; // 初始化b指针数组,使每个指针元素指向a数组中对应元素的结点 for (i = 0; i < n; i++) { b[i] = new BTreeNode; b[i]->weight = a[i]; b[i]->left = b[i]->right = NULL; } // 进行n-1此循环建立哈夫曼树 for (i = 1; i < n; i++) { // 用k1表示森林中具有最小权值的树根节点下标 // 用k2表示森林中具有次小权值的树根节点下标 int k1=-1, k2; for (j = 0; j < n; j++) { if (b[j] != NULL && k1 == -1) { k1 = j; continue; } if (b[j] != NULL) { k2 = j; break; } } // 从当前森林中求出最小权值树和次小权值树 for (j = k2; j < n; j++) { if (b[j] != NULL) { if (b[j]->weight < b[k1]->weight) { k2 = k1; k1 = j; } else if (b[j]->weight < b[k2]->weight) k2 = j; } } // 由最小权值树和次小权值树建立一棵新树,q指向树跟结点 q = new BTreeNode; q->weight = b[k1]->weight + b[k2]->weight; q->left = b[k1]; q->right = b[k2]; // 将指向新树的指针赋给b指针数组k1位置,k2位置置为空 b[k1] = q; b[k2] = NULL; } // 删除动态建立的数组b delete []b; // 返回整个哈夫曼树的树根指针 return q; } void HuffManCoding(BTreeNode *FBT, int len) { // 根据FBT指针所指向的哈夫曼树输出每个叶子的编码,len初值为0 static int code[10]; // 数组的长度要至少等于哈夫曼树的深度减1 if (FBT != NULL) { // 访问到叶子结点时输出其保存在数组code中的0和1序列编码 if (FBT->left == NULL && FBT->right == NULL) { cout << "结点权值为" << FBT->weight << "的编码:"; for (int i = 0; i < len; i++) cout << code[i] << " "; cout << endl; } // 访问到非叶子节点时分别向左、右子树递归调用,并分别把分支上 // 的0、1编码保存到数组code,向下深入一层时len+1 else { code[len] = 0; HuffManCoding(FBT->left, len + 1); code[len] = 1; HuffManCoding(FBT->right, len + 1); } } } void CleanBTree(BTreeNode *BT) { if (BT != NULL) { CleanBTree(BT->left); CleanBTree(BT->right); delete BT; BT = NULL; } } int main() { int n, i; BTreeNode *fbt = NULL; // 输入哈夫曼树中叶子结点数 cout << "输入待构造的哈夫曼树中带权叶子结点的权值n:"; cin >> n; // 用数组a保存从键盘输入的n个叶子结点的权值 int *a = new int[n]; cout << "输入" << n << "个整数作为权值:"; for (i = 0; i < n; i++) cin >> a[i]; // 根据数组a建立哈夫曼树 fbt = CreateHuffman(a, n); // 输出哈夫曼编码,即每个叶子节点所对应的0、1序列 cout << "树种每个叶子的哈夫曼编码:" << endl; HuffManCoding(fbt, 0); CleanBTree(fbt); } ```

opencv 有关cvseq类的问题

这段代码返回的值到底是什么?一个矩阵序列? CvSeq* findSquares4(IplImage* img, CvMemStorage* storage, int minarea, int maxarea, int minangle, int maxangle, int(&temp)[30]) { CvSeq* contours;//边缘 int N = 6; //阈值分级 CvSize sz = cvSize(img->width & -2, img->height & -2); IplImage* timg = cvCloneImage(img);//拷贝一次img IplImage* gray = cvCreateImage(sz, 8, 1); //img灰度图 IplImage* pyr = cvCreateImage(cvSize(sz.width / 2, sz.height / 2), 8, 3); //金字塔滤波3通道图像中间变量 IplImage* tgray = cvCreateImage(sz, 8, 1); ; CvSeq* result; double s, t; int sk = 0; CvSeq* squares = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint), storage); cvSetImageROI(timg, cvRect(0, 0, sz.width, sz.height)); //金字塔滤波 cvPyrDown(timg, pyr, 7); cvPyrUp(pyr, timg, 7); //在3个通道中寻找矩形 for (int c = 0; c < 3; c++) //对3个通道分别进行处理 { cvSetImageCOI(timg, c + 1); cvCopy(timg, tgray, 0); //依次将BGR通道送入tgray for (int l = 0; l < N; l++) { //不同阈值下二值化 cvThreshold(tgray, gray, 75, 250, CV_THRESH_BINARY); cvShowImage("111", gray); cvFindContours(gray, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0)); while (contours) { //多边形逼近 result = cvApproxPoly(contours, sizeof(CvContour), storage, CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0); //如果是凸四边形并且面积在范围内 if (result->total == 4 && fabs(cvContourArea(result, CV_WHOLE_SEQ)) > minarea && fabs(cvContourArea(result, CV_WHOLE_SEQ)) < maxarea && cvCheckContourConvexity(result)) { s = 0; //判断每一条边 for (int i = 0; i < 5; i++) { if (i >= 2) { //角度 t = fabs(angle((CvPoint*)cvGetSeqElem(result, i), (CvPoint*)cvGetSeqElem(result, i - 2), (CvPoint*)cvGetSeqElem(result, i - 1))); s = s > t ? s : t; } } //这里的S为直角判定条件 单位为角度 if (s > minangle && s < maxangle) { for (int i = 0; i < 4; i++) cvSeqPush(squares, (CvPoint*)cvGetSeqElem(result, i)); CvRect rect = cvBoundingRect(contours, 1); // 获取矩形边界框 CvPoint p1; p1 = cvPoint(rect.x + rect.width / 2, rect.y + rect.height / 2); //矩形中心坐标 std::cout << "X:" << p1.x << "Y:" << p1.y << std::endl; } } contours = contours->h_next; } } std::cout << "圆的数量是" << sk << std::endl; temp[26] = sk; sk = 0; } cvReleaseImage(&gray); cvReleaseImage(&pyr); cvReleaseImage(&tgray); cvReleaseImage(&timg); return squares; }

unity动态生成类,动态添加dll库的问题

目的是通过解析Excel动态生成类,所生成的类希望序列化而且继承ScriptObject 源代码: ``` using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using NUnit.Framework; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection; using System.Text; public class ExcelManager : MonoBehaviour { public List<string> _valType; public List<string> _valName; public string _className; public Assembly _assembly; public static StringBuilder _classSource; public void ReadExcel(string path) { IWorkbook workbook = null; FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); if (path.IndexOf(".xlsx") > 0) { //2007版 workbook = new XSSFWorkbook(fileStream); } else if (path.IndexOf(".xls") > 0) { //2003版 workbook = new HSSFWorkbook(fileStream); } else { Debug.LogError("Invalid path."); } ISheet sheet = workbook.GetSheetAt(0); _className = sheet.SheetName.Substring(1, sheet.SheetName.Length - 1); IRow row; for (int i = 0; i <= sheet.LastRowNum; ++i) { row = sheet.GetRow(i); if (row != null) { //若该行首列内容以'#'开头,则为无效列 string tmp = row.GetCell(0).ToString(); if (tmp[0] == '#') { continue; } for (int j = 0; j < row.LastCellNum; ++j) { string cellValue = row.GetCell(j).ToString(); if (cellValue[0] == '&') { //内容以'&'开头则记录变量名和类型 int index = cellValue.IndexOf('|'); string tmpVarName = cellValue.Substring(1, index - 1); tmpVarName.ToLower(); string tmpVarType = cellValue.Substring(index + 1, cellValue.Length - (index + 1)); tmpVarName.ToLower(); _valType.Add(tmpVarType); _valName.Add(tmpVarName); } //---TODO--- //是否记录数据 } } } fileStream.Close(); workbook.Close(); } public void NewAssembly() { CSharpCodeProvider provider = new CSharpCodeProvider(); CompilerParameters paras = new CompilerParameters(); paras.GenerateExecutable = false; paras.GenerateInMemory = true; paras.OutputAssembly = "Assets/Plugins" + _className + ".dll"; _classSource = GetClassSource(); CompilerResults result = provider.CompileAssemblyFromSource(paras, _classSource.ToString()); //验证编译错误 if (result.Errors.HasErrors) { foreach (var error in result.Errors) { _classSource.AppendLine(error.ToString()); } //验证文本 FileStream fst = new FileStream("/Users/lijiesheng/Desktop/Error.txt", FileMode.Create); byte[] data = System.Text.Encoding.Default.GetBytes(_classSource.ToString()); fst.Write(data, 0, data.Length); fst.Flush(); fst.Close(); } _assembly = result.CompiledAssembly; } public StringBuilder GetClassSource() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("using System;\n"); stringBuilder.Append("using UnityEngine;\n"); stringBuilder.Append("using System.Collections;\n"); stringBuilder.Append("using System.Collections.Generic;\n\n"); stringBuilder.Append("public class NewClass\n"); stringBuilder.Append("{\n"); stringBuilder.Append("\t[System.Serializable]\n"); stringBuilder.Append("\tpublic class " + _className + " : ScriptableObject\n"); stringBuilder.Append("\t{\n"); int len = _valType.Count; for (int i = 0; i < len; ++i) { stringBuilder.Append("\t\tpublic " + _valType[i] + " " + _valName[i] + ";\n"); } stringBuilder.Append("\t}\n"); stringBuilder.Append("\n\t[SerializeField]\n"); stringBuilder.Append("\tpublic List<" + _className + "> Fields;\n"); stringBuilder.Append("}\n"); return stringBuilder; } void Start() { ReadExcel("/Users/lijiesheng/Desktop/test.xlsx"); NewAssembly(); } } ``` 但是动态生成类的时候报错如下,打印到了文本里: ``` using System; using UnityEngine; using System.Collections; using System.Collections.Generic; public class NewClass { [System.Serializable] public class Field : ScriptableObject { public int VarName1; public float VarName2; public string VarName3; public bool VarName4; } [SerializeField] public List<Field> Fields; } /var/folders/19/xjrl577j315f2vjb0ddrl2h40000gn/T/26505f4c/65304a7e.0.cs(2,7) : error CS0246: The type or namespace name `UnityEngine' could not be found. Are you missing an assembly reference? /var/folders/19/xjrl577j315f2vjb0ddrl2h40000gn/T/26505f4c/65304a7e.0.cs(9,23) : error CS0246: The type or namespace name `ScriptableObject' could not be found. Are you missing an assembly reference? ``` 上面是我希望生成类的结构,下面是生成时候的报错信息,为什么解析不了UnityEngin,有没有上面解决办法 动态添加dll好像也不行: parameters.ReferencedAssemblies.Add("UnityEngine.dll"); 报错变成:error CS0006: Metadata file `UnityEngine.dll' could not be found

有关VC++运行SGA程序出错,自动关闭程序的问题。

大家好,在用VC++(绿色版)运行SGA程序的时候,显示出现了“一个不能解决的问题”,即关闭。请大家帮帮忙,让程序能顺利运行~第一次进论坛,谢谢大家啦! 程序如下:(主要是后面的适应度函数) (目标是对工序排列,使工人总的工资成本最低。每道工序时间不同,工人工资也不同) #include <stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> #include<conio.h> #define N 5 #define M 2 //5个工序,2个工人 #define POPSIZE 500 int u[N]={1,2,1,2,1}; //不同工序持续时间 int c[M]={2,5}; //工人每小时工作成本 int T[M]={3,2}; //每个工人参与工序的总次数 int J[M][N]; //记录工人在某个工序参加与否 int a[M][N]={{1,2,3},{3,4,5}}; //每个工人参加的工序集 int popsize ; //种群大小 int maxgeneration; //最大世代数 double pcross = 0.0; //交叉率 double pmutation = 0.0; //变异率 double sumfitness; //种群个体适应值累计 struct individual //定义染色体个体结构体 { int chrom[N]; //定义染色体二进制表达形式 double fitness; //染色体的适应值 }; int generation; //当前执行的世代数 int best_index; //本世代最好的染色体索引序号 struct individual bestindividual; //最佳染色体个体 struct individual currentbest; //当前最好的染色体个体 currentbest int bestgeneration; //当前最好染色体个体产生的代数 struct individual oldpop[POPSIZE];//种群数组 struct individual newpop[POPSIZE];//新种群数组 /* 随机数发生器使用的静态变量 */ static double oldrand[55]; static int jrand; static double rndx2; static int rndcalcflag; //函数声明 void printline(FILE *); void initialoldpop(FILE *ffp); //初始化当代种群 void generatenextpop(FILE *ffp); //产生下一代种群 void evaluateoldpop(); //评价种群 void calculateobjectfitness(); //计算种群适应度 void findbestindividual(); //寻找最好的染色体个体 int select(); //选择操作 //将p中移除掉q中位置在j1,j2之间的元素,其余元素前移,返回剩下元素的数量 int searchanddelete(int *p,int* q,int j1,int j2); void crossover(int *,int *,int *,int *,FILE *ffp); //交叉操作 void mutation(int *); //变异操作 void input(); //输入接口 void outputtextreport(FILE *ffp); //每代输出文字报告 void report(FILE *ffp); //输出最终结果报告 //以下为一些随机数相关函数 void advance_random(); int flip(double);int rnd(int, int); void randomize(); double randomnormaldeviate(); float randomperc();float rndreal(float,float); void warmup_random(float); void main() //主函数 (函数主体开始) { int i; FILE *fp; //指针文件 //打开文本文件 if((fp= fopen("Result.txt","w+"))==NULL) { printf("Can not open file!\n"); } fprintf(fp,"本程序为使用基本SGA求解\n"); generation=0; //初始化generation当前执行的代 input(); //初始化种群大小、交叉率、变异率 randomize(); // 初始化随机数发生器 initialoldpop(fp); //产生初始化种群 evaluateoldpop(); while(generation<maxgeneration) //小于最大世代数,执行循环体 { generation++; generatenextpop(fp); //生成子代种群(A.选择; B.交叉; C.变异) for(i = 0 ; i < popsize ; i++) { oldpop[i]=newpop[i]; } evaluateoldpop(); //评价新生子代种群 outputtextreport(fp); //输出当前子代种群统计报告 } report(fp);//输出最终报告 fclose(fp); //关闭fp指向的文件句柄,防止句柄泄露 printf("计算结果已输出到Result.txt文件中。"); getch(); } void printline(FILE *ffp) { fprintf(ffp,"\n*************************************************************\n"); } void initialoldpop(FILE *ffp) //种群初始化,对种群中每条染色体,生成1-5的不重复序列 { int i,j,p,q,r; int l=0; int a[N]; srand( (unsigned)time( NULL ) ); for (i=0;i<popsize; i++) { for(j=0;j<N;j++) a[j]=j; //对oldpop[i]染色体生成随机序列 p=N; q=0; while(p> 0) { r=rand(); r%=p; oldpop[i].chrom[l]=a[r]; a[r]=a[p-1]; // 把后一个拷贝到刚生成的位置 q++; p--; } } } void generatenextpop(FILE *ffp) //生成下一代 { int mate1,mate2,j=0; do{ //挑选交叉配对 mate1=select(); mate2=select(); crossover(oldpop[mate1].chrom,oldpop[mate2].chrom,newpop[j].chrom,newpop[j+1].chrom,ffp); mutation(newpop[j].chrom); mutation(newpop[j+1].chrom); j=j+2; } while(j<(popsize-1)); } void evaluateoldpop() //评价种群 { calculateobjectfitness(); //计算种群个体的适应度 findbestindividual(); //找到最好和最差的染色体个体 } void calculateobjectfitness() //计算染色体个体适应值 { int i,j,k,l,r,x; int p=0; int temp=0; int X[M]; for(i=0;i<popsize;i++) { oldpop[i].fitness=0.0; for(l=0;l<N;l++) { r=oldpop[i].chrom[l]; temp=u[r]; u[r]=u[l]; u[l]=temp; } for(j=0;j<M;j++) { for(k=0;k<N;k++) for(l=0;l<N;l++) { if(a[j][k]==oldpop[i].chrom[l]) J[j][l]=1; else J[j][l]=0; //记录各个工人在随机情景序列中的参与位置 } while(J[j][p]!=1) { p++; } x=1; X[j]=u[p]; while(x<T[j]) { p++; X[j]+=u[p]; if(J[j][p]==1) x++; } } for(j=0;j<M;j++) oldpop[i].fitness+=X[j]*c[j]; } } void findbestindividual( ) //求最佳个体 { int i; sumfitness=0.0; bestindividual=oldpop[0]; best_index=0; sumfitness+=oldpop[0].fitness; currentbest.fitness=oldpop[0].fitness; for(generation=0;generation<maxgeneration;generation++) for (i=1;i<popsize; i++) { if (oldpop[i].fitness<bestindividual.fitness) //依次比较,找出最佳个体 { bestindividual=oldpop[i]; //(选适应值最小的) best_index=i; } sumfitness+=oldpop[i].fitness; // 存放种群总体适应值 } if(bestindividual.fitness<currentbest.fitness)//第n代最好的,通过比较小于以往最好个体的话,暂时存放在currentbest { currentbest=bestindividual; bestgeneration=generation; } } 谢谢大家~

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

2020春招面试了10多家大厂,我把问烂了的数据库事务知识点总结了一下

2020年截止目前,我面试了阿里巴巴、腾讯、美团、拼多多、京东、快手等互联网大厂。我发现数据库事务在面试中出现的次数非常多。

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

立即提问
相关内容推荐