android studio val,Kotlin学习笔记之const val与val

const的使用

const 必须修饰val

const 只允许在top-level级别和object中声明,使用方式如下:

const val THOUSAND = 1000

object myObject {

const val constNameObject: String = "constNameObject"

}

class MyClass {

companion object Factory {

const val constNameCompanionObject: String = "constNameCompanionObject"

}

}

const val和val区别:

说到这,我们还是没有搞清楚const和val的区别,ok让我们看代码分析。

object myObject {

const val constObject: String = "constObject"

val normalObject: String = "normalObject"

}

打开Android studio 点击 Tools->Kotlin->Show Kotlin ByteCode

// class version 50.0 (50)

// access flags 0x31

public final class com/example/kotlin/myObject {

// access flags 0x19

public final static Ljava/lang/String; constObject = "constObject"

@Lorg/jetbrains/annotations/NotNull;() // invisible

// access flags 0x1A

private final static Ljava/lang/String; normalObject = "normalObject"

@Lorg/jetbrains/annotations/NotNull;() // invisible

// access flags 0x11

public final getNormalObject()Ljava/lang/String;

@Lorg/jetbrains/annotations/NotNull;() // invisible

L0

LINENUMBER 144 L0

GETSTATIC com/example/kotlin/myObject.normalObject : Ljava/lang/String;

ARETURN

L1

LOCALVARIABLE this Lcom/example/kotlin/myObject; L0 L1 0

MAXSTACK = 1

MAXLOCALS = 1

......

}

从字节码我们可以看到const val 和val修饰对象的主要区别是:

const val 可见性为public final static,可以直接访问。

val 可见性为private final static,并且val 会生成方法getNormalObject() ,通过方法调用访问。

附:Kotlin中var和val的区别

Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的。

var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。

val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。

var name = "zhang san"

println(name)

name = "li si"

println(name)

val finalValue = "我是不可改变的";

println(finalValue);

总结:

当定义常量时,出于效率考虑,我们应该使用const val方式,避免频繁函数调用。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要定义一个数据模型类来表示生词本的单词和解释,如下所示: ```kotlin data class Word(val id: Long = -1, val word: String, val meaning: String) ``` 接下来,我们需要创建一个类来管理SQLite数据库和表格的创建,更新和查询。这个类应该继承自SQLiteOpenHelper类,如下所示: ```kotlin class WordDatabaseHelper( context: Context, name: String? = null, factory: SQLiteDatabase.CursorFactory? = null, version: Int = 1 ) : SQLiteOpenHelper(context, name, factory, version) { companion object { private const val DATABASE_NAME = "word.db" private const val DATABASE_VERSION = 1 const val TABLE_NAME = "words" const val ID = "_id" const val WORD = "word" const val MEANING = "meaning" } override fun onCreate(db: SQLiteDatabase?) { val createTableSql = """ CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY AUTOINCREMENT, $WORD TEXT NOT NULL, $MEANING TEXT NOT NULL ) """.trimIndent() db?.execSQL(createTableSql) } override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { val dropTableSql = "DROP TABLE IF EXISTS $TABLE_NAME" db?.execSQL(dropTableSql) onCreate(db) } } ``` 在这个类中,我们定义了数据库的名称和版本,以及表格的名称和列名。在onCreate()方法中,我们创建了一个名为words的表格,并定义了三个列:_id,word和meaning。在onUpgrade()方法中,我们删除了旧表格并重新创建。 接下来,我们可以创建一个单例类来管理数据库的操作,如下所示: ```kotlin object WordDatabaseManager { private lateinit var dbHelper: WordDatabaseHelper private lateinit var db: SQLiteDatabase fun init(context: Context) { dbHelper = WordDatabaseHelper(context, WordDatabaseHelper.DATABASE_NAME, null, WordDatabaseHelper.DATABASE_VERSION) db = dbHelper.writableDatabase } fun insert(word: Word): Boolean { val contentValues = ContentValues().apply { put(WordDatabaseHelper.WORD, word.word) put(WordDatabaseHelper.MEANING, word.meaning) } val result = db.insert(WordDatabaseHelper.TABLE_NAME, null, contentValues) return result != -1L } fun queryAll(): List<Word> { val cursor = db.query( WordDatabaseHelper.TABLE_NAME, arrayOf(WordDatabaseHelper.ID, WordDatabaseHelper.WORD, WordDatabaseHelper.MEANING), null, null, null, null, null ) val wordList = mutableListOf<Word>() while (cursor.moveToNext()) { val id = cursor.getLong(cursor.getColumnIndex(WordDatabaseHelper.ID)) val word = cursor.getString(cursor.getColumnIndex(WordDatabaseHelper.WORD)) val meaning = cursor.getString(cursor.getColumnIndex(WordDatabaseHelper.MEANING)) wordList.add(Word(id, word, meaning)) } cursor.close() return wordList } fun delete(id: Long): Boolean { val result = db.delete(WordDatabaseHelper.TABLE_NAME, "${WordDatabaseHelper.ID} = ?", arrayOf(id.toString())) return result > 0 } } ``` 在这个类中,我们使用WordDatabaseHelper类创建了一个数据库,并定义了三个常见的操作:插入,查询和删除。在insert()方法中,我们创建了一个ContentValues对象并将单词和解释添加到其中,然后使用insert()方法将其插入到数据库中。在queryAll()方法中,我们使用query()方法查询所有单词并返回它们的列表。在delete()方法中,我们使用delete()方法根据_id删除一个单词。 现在我们可以在Activity中使用这个类,如下所示: ```kotlin class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) WordDatabaseManager.init(this) binding.btnAdd.setOnClickListener { val word = binding.etWord.text.toString() val meaning = binding.etMeaning.text.toString() if (word.isNotEmpty() && meaning.isNotEmpty()) { val result = WordDatabaseManager.insert(Word(word = word, meaning = meaning)) if (result) { Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show() binding.etWord.setText("") binding.etMeaning.setText("") } else { Toast.makeText(this, "添加失败", Toast.LENGTH_SHORT).show() } } else { Toast.makeText(this, "请输入单词和解释", Toast.LENGTH_SHORT).show() } } binding.btnQuery.setOnClickListener { val words = WordDatabaseManager.queryAll() val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, words) binding.lvWords.adapter = adapter } binding.lvWords.setOnItemClickListener { _, _, position, _ -> val word = binding.lvWords.adapter.getItem(position) as Word val dialog = AlertDialog.Builder(this) .setTitle("删除单词") .setMessage("确定要删除单词${word.word}吗?") .setPositiveButton("确定") { _, _ -> val result = WordDatabaseManager.delete(word.id) if (result) { Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show() binding.btnQuery.performClick() } else { Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show() } } .setNegativeButton("取消", null) .create() dialog.show() } } } ``` 在这个Activity中,我们使用WordDatabaseManager类来执行添加,查询和删除操作,并使用ListView显示所有单词。当用户点击一个单词时,我们会显示一个对话框询问用户是否要删除该单词。 现在,我们已经成功地创建了一个共享生词本应用程序,并使用SQLite数据库和SQLiteOpenHelper实现了数据存储和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值