java中类的显示初始化是在什么时候执行的java中类的显示初始化会在首次被“主动使用”时执行初始化java代码中初始化控件,为类(静态)变量赋予正确的初始值 。在Java代码中java代码中初始化控件,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的 。而我们这里所说的主动使用 包括:
1. 创建类的实例
2. 调用类的静态方法
3. 使用类的非常量静态字段
4. 调用Java API中的某些反射方法
5. 初始化某个类的子类
6. 含有main()方法的类启动时
初始化一个类包括两个步骤:
1、 如果类存在直接父类的话,且直接父类还没有被初始化 , 则先初始化其直接父类
2、 如果类存在一个初始化方法,就执行此方法
注:初始化接口并不需要初始化它的父接口 。
java中一个类的属性何时初始化我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程 。下面先对这三阶段做一个简单的描述 , 之后会结合一个简单的例子来说明java中类的初始化过程 。
在装载阶段,类装载器(Bootstrap ClassLoader 或者用户自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象 , 这个Class对象封装了我们要使用的类的类型信息 。
连接阶段又可以分为三个子步骤:验证、准备和解析 。
验证就是要确保java类型数据格式 的正确性,并适于JVM使用 。
准备阶段,JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表 。
解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用 , 把这些符号引用替换成直接引用 。这个阶段可以被推迟到初始化之后 , 当程序运行的过程中真正使用某个符号引用的时候 再去解析它 。
类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值 。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的 。而我们这里所说的主动使用 包括:
1.创建类的实例
2.调用类的静态方法
3.使用类的非常量静态字段
4.调用Java API中的某些反射方法
5.初始化某个类的子类
6.含有main()方法的类启动时
初始化一个类包括两个步骤:
1、如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类
2、如果类存在一个初始化方法,就执行此方法
注:初始化接口并不需要初始化它的父接口 。
追问
你这不是初始化实例么
java 中 父类写初始化代码 反射获取类中的所有属性 并按照某种逻辑赋值(我是为了初始化Spring中的Bean)这种想法是不可能实现java代码中初始化控件的java代码中初始化控件,父类中是获取不到子类java代码中初始化控件的属性的java代码中初始化控件,java代码中初始化控件你需要换一个思路解决问题 。
JAVA里初始化是什么意思?初始化就是给变量一个初始值 。
例如:
声明一个变量:String aa = "abc";int cc =0;其中abc和0就是初始化的值 , 最后值不一定是abc或者 0加入你覆盖了aa的值如下:
aa = "def" ; cc=1;那最后aa变量的值就是def , cc变量就是1了,初始化的目的是为了让变量有值,防止使用时出现异常 。
扩展资料:
作用
1、遇到new,getstatic,putstatic,或invokestatic这4条字节码指令时,如果类没有进行过初始化 , 则需要先触发其初始化 。生成这四条指令单最常见的Java代码场景是:
使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰 , 已在变异期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候 。
2、使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先出法其初始化 。
3、当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先出法其父类的初始化 。
4、当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类 。
java中的choice控件如何设定初始大小你问的是包含项目的多少吧?
Choice自动管理项目,不用干预 。只有唯一的构造函数Choice(),必须通过.addItem(...)添加 。
简便方法是,将所有项构造一个数组:
Choice itemList=new Choice();
String[] items=new String[]{"第一项","第二项",...};
for(int i=0;iitems.length;i){
itemList.addItem(items[i]);
}
android怎么用流 读取云端图片在Java 直接用BitmapFactory.decodeFile(pathName);就可以读取 。
或者用你的方式,BitmapFactory.decodeStream(fosfrom);
SE的学习过程中 , 我们就接触到了I/O流的概念,并且使用了一些文件输入输出流的API来将数据保存到文件或者是从文件中读取数据 。同样 , 这个手段也适用于Android系统,我们可以在应用开发过程中使用文件相关的API方法 。
何谓内部存储呢?实际上就是指将程序的私有数据以文件的形式存储在Android设备的内存中 。同理,如果是存放在SD卡等地方 , 就称之为外部存储 。
我们在,你需要建立文件的输入输出流,并在流中操作数据 。
首先是写文件 。
为了使用内部存储向文件中写入一些数据 , 你可以调用openFileOutput()方法,需要的参数为文件名和写入模式 。写入模式实际上就是该文件的权限归属,可以是公有的,也可以是私有的 。如何具体地创建一个文件输出流呢 , 具体方式如下:
FileOutputStream fileOut =
openFileOutput("file_name",MODE_WORLD_READABLE);
//第一个参数即文件名,第二个参数表示文件存储的模式
对于第二个参数,需要补充的是:文件存储的模式公有四种:
MODE_PRIVATE:该模式是默认的,通过该模式创建的文件是私有的,即只能被应用本身访问 。注意:在该模式下写入的内容会覆盖原有的内容 。
MODE_APPEND:与上个模式类似 , 但在写入内容时会检查待创建的文件是否存在 。若文件已被创建,则往该文件中追加内容,而不是覆盖原来的内容;若文件未被创建 , 则创建新的文件 。
MODE_WORLD_READABLE:表示当前创建的这个文件允许被其他应用读取 。
MODE_WORLD_WRITEABLE:表示当前创建的这个文件允许被其他应用写入 。
默认情况下,不仅是应用创建的文件,包括Shared
Preferences和数据库 , 都是私有的 。那么问题来了,如果希望其他应用既能读又能写,应该怎么办呢?参考下面这种用法:
FileOutputStream fileOut = openFileOutput("file_name",MODE_WORLD_READABLE
MODE_WORLD_WRITEABLE);
而对于openFileOutput()方法 , 它返回的是一个FileOutputStream实例 。换言之,你通过文件输出流对象中得到了这个实例,随后你便可以调用写相关的方法来向文件写入数据 。具体的用法如下:
String str = "shiyanlou";
//待写入的数据
fOut.write(str.getBytes());
//实际上写入文件的是一个字节数组,我们用gettBytes()方法将其转换成目标格式
fOut.close();
//记得写入完毕后要用close()结束
接下来是读文件 。
怎样读取我们刚刚创建的这个文件呢?你应该猜到了,是使用openFileInput()方法 。该方法需要填入待读取文件的文件名,同样,它返回的是一个FileInputStream的实例 。具体用法如下:
FileInputStream fileIn = openFileInput(file);
在打开输入流后 , 你可以调用read()方法每次从文件中读出一个字符出来,然后装入一个字符串变量中 。具体做法如下:
int ch;
String temp="";
while( (ch = fin.read()) != -1){
temp = tempCharacter.toString((char)ch);
//不断地追加读取的内容
}
//通过一个for循环,你最后得到的temp字符串包含了文件中的所有数据
fileIn.close();
//记得要关闭输入流
除了上面我们用到的这些方法(比如write()、read()和close()),FileOutputStream和FileInputStream类中还有很多常用的方法 , 我们在下面作一简要介绍 。
FileOutputStream类中的其它常用方法:
write(byte[] b, int off, int len):该方法从指定的字节数组开始到该文件输出流关闭写入len字节 。
getChannel():该方法返回一个只读的、与文件输出流关联的文件通道对象(FileChannel)
getFD():该方法返回与此流有关的文件描述符对象(FileDescriptor)
FileInputStream类中的其它常用方法:
read(byte[] b, int off, int len):该方法从输入流中数据读取最多len个字节到字节数组
getChannel():该方法返回一个只读的、与文件输出流关联的文件通道对象(FileChannel)
getFD():该方法返回与此流有关的文件描述符对象(FileDescriptor)
available():该方法可通过一个方法的调用者从输入流中阻止这个输入流返回可以读取(或跳过)的字节数的估计值 。
四、在Android上实现文件读写
下面我们通过一个实例来学习如何将Java中常用的文件读写沿用到Android中去 。
实验步骤主要有:
(若你已在第二小节完成 , 请跳至下一步)使用Android
Studio创建应用项目FileIOPractice,包名为com.shiyanlou.android.fileiopractice,基于Android
5.1制作 。同时添加MainActivity及其布局资源文件 。
创建并打开AVD模拟器(镜像选择API22:Android 5.1.1) 。
在res/layout/activity_main.xml资源文件放入一些文本框和按钮 。
在MainActivity.java中,初始化要用到的控件,添加文件读写相关的代码 。
编译并运行这个应用,等待应用安装至模拟器 , 在模拟器中使用该应用 。
现在你可以按照上述步骤自己完成该实验 。下面也给出了本实验涉及到的源代码和资源文件详情,在必要时你可以使用它们 。在注释中我们也对一些模块进行了详细的讲解 。
以下是MainActivity的布局文件res/layout/activity_main.xml:
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@ id/textview_domain"
android:text="Shiyanlou.com"
android:textSize="40dp"
android:textColor="#11AA8C"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" /
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@ id/textView_appName"
android:text="File I/O Practice"
android:layout_below="@ id/textview_domain"
android:layout_centerHorizontal="true"
android:textColor="#000000"
android:textSize="40dp" /
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@ id/editText"
android:hint="Input some text here."
android:focusable="true"
android:layout_marginTop="20dp"
android:layout_below="@ id/textView_appName"
android:layout_alignEnd="@ id/textView_appName"
android:layout_alignLeft="@ id/textView_appName"
android:layout_alignStart="@ id/textView_appName"
android:layout_alignRight="@ id/textView_appName"
android:inputType="textMultiLine"
android:minLines="5"
android:background="#DDDDDD" /
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@ id/textView_data"
android:text="Text would be shown here."
android:layout_below="@ id/button_save"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" /
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@ id/button_save"
android:text="Save File"
android:textColor="#FFFFFF"
android:background="#11AA8C"
android:layout_alignLeft="@ id/textView_appName"
android:layout_alignStart="@ id/textView_appName"
android:layout_below="@ id/editText"
android:layout_marginTop="20dp"/
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@ id/button_load"
android:text="Load File"
android:textColor="#FFFFFF"
android:background="#11AA8C"
android:layout_alignTop="@ id/button_save"
android:layout_alignRight="@ id/editText"
android:layout_alignEnd="@ id/editText" /
以下是src/MainActivity.java中的源代码:
package com.shiyanlou.android.fileiopractice;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
private Button button_save;
private Button button_load;
private TextView textView_status;
private EditText editText;
//声明各个控件
private String data;
private String file = "shiyanlou_file";
//声明用于存放数据的变量data和文件名常量file
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_save =(Button)findViewById(R.id.button_save);
button_load =(Button)findViewById(R.id.button_load);
editText =(EditText)findViewById(R.id.editText);
textView_status =(TextView)findViewById(R.id.textView_data);
//实例化各个控件
//为按钮设置点击事件监听器
//首先是保存按钮(写操作)
button_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data = https://www.04ip.com/post/editText.getText().toString();
//调用getText()方法从文本框中读取内容 , 使用toString()方法将其转化为String类型数据,并存放到data变量中
try {
//对于文件读写操作应使用异常处理流程
FileOutputStream fileOut = openFileOutput(file, MODE_APPEND);
// 此处用到了MODE_PRIVATE,在新版本的Android系统中 , 不推荐使用MODE_WORLD_READABLE等模式
// 这是因为Android中为应用间的数据交互提供了更好的支持,如Content Privoder等,你可一进步了解
fileOut.write(data.getBytes());
//用write()方法保存数据
fileOut.close();
//关闭输出流
Toast.makeText(getBaseContext(), "File saving completed.",
Toast.LENGTH_SHORT).show();
//用一个Toast来告诉用户已经写入完毕了
} catch (Exception e) {
e.printStackTrace();
}
【java代码中初始化控件 java初始化的作用】}
});
//其次是读取按钮(读操作)
button_load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//同理,建立文件输入流
FileInputStream fileIn = openFileInput(file);
int ch;
//声明一个整型变量ch用于接收数据
String tempText = "";
//这里的tempText用于临时存放读取的数据(字符串)
while ((ch = fileIn.read()) != -1) {
//这里的-1是特定的状态码 , 表示文件读取结束
//在while循环中逐个读取数据,并追加到tempText中
tempText = tempTextCharacter.toString((char) ch);
//将ch转化为字符
}
textView_status.setText(tempText);
//读取完毕后将文字显示出来
Toast.makeText(getBaseContext(), "File reading completed.",
Toast.LENGTH_SHORT).show();
//同样用一个Toast告知用户已经读取完成
} catch (Exception e) {
}
}
});
}
}
检查一下代码,编译并运行该应用 。在模拟器中尝试输入一些信息,保存一下,再试着读取它们 。
java代码中初始化控件的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于java初始化的作用、java代码中初始化控件的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么将系统装进u盘,怎么将系统装进u盘里
- 如何申请页游推广连接,页游推广渠道
- 包含xp怎么给u盘怎么加密码的词条
- PostgreSQL的latch,POSTGRESQL卸载不干净
- mysql怎么选取索引 mysql怎样使用索引
- 如何在网络上建设网站推广,网站怎么做推广和宣传
- linux网卡亮灯命令,linux 网卡灯闪烁命令
- 新媒体运营如何创业,新媒体运营如何创业发展
- mysql怎么看表大小 mysql 查看表大小